Страница: 1 | 2 | 3 |
Вопрос: VB2005 массивы
Добавлено: 08.03.07 19:50
Автор вопроса: -=Fenix=-
У меня есть массив к которому привязаны свойства через Structure. Есть ли ф-ия или св-во что бы убить в середине запись и массив сдвинулся на 1 убитую запись? Или всёже нада пересобирать массив, т.е. писать отдельную ф-ию?
Ответы
Всего ответов: 37
Номер ответа: 1
Автор ответа:
-=Fenix=-
Вопросов: 33
Ответов: 81
Профиль | | #1
Добавлено: 08.03.07 20:08
И можно ли так же убить элемент св-ва этого массива? если свойство тоже предстваляет массив
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 09.03.07 00:34
RemoveAt или Remove
Разница в том, что в первом случае в качестве параметра передаешь индекс элеменна массива, а во втором непосредственно объект..
Номер ответа: 3
Автор ответа:
-=Fenix=-
Вопросов: 33
Ответов: 81
Профиль | | #3
Добавлено: 09.03.07 09:44
Ах, если было бы всё так просто. Вот у меня код
//Обьявление в классе Class
Structure Test
 im TestA As String
 im TestB As String
End Structure
//Процедура
Dim Tests() as Class.Test
ReDim tests(3)
Tests(1).TestA = "123"
Tests(2).TestA = "345"
Tests(3).TestA = "567"
После этого, св-во Remove можно применить как нистранно только TestA или TestB, а к самому обьекту нельзя. Как быть?
Номер ответа: 4
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 09.03.07 16:18
Сорри .. просмотрел, что речь идео о "чистом" массиве.
В этом случае придется пересобирать его заново..
Я для удобства операций обычно пользуюсь его наследником ArrayList или любой другой коллекцией. В них все эти операции операции предусмотрены..
Номер ответа: 5
Автор ответа:
-=Fenix=-
Вопросов: 33
Ответов: 81
Профиль | | #5
Добавлено: 10.03.07 00:26
Можно примерчик как бы реализовать что было выше? А то я с vb2005 пока не сильно дружу
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 10.03.07 01:45
Как один из вариантов:
Structure Man
Sub New(ByVal Name As String, _
ByVal Age As Int32)
_name = Name
_age = Age
End Sub
Private _name As String
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal Value As String)
_name = Value
End Set
End Property
Private _age As Int32
Public Property Age() As Int32
Get
Return _age
End Get
Set(ByVal Value As Int32)
_age = Value
End Set
End Property
Public Overrides Function ToString() As String
Return String.Format("Имя: {0} Возраст: {1} лет", Me.Name, Me.Age)
End Function
End Structure
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Dim Tests As New List(Of Man)
Tests.Add(New Man("Вася", 19))
Tests.Add(New Man("Маша", 27))
Dim _man As New Man("Настя", 25)
Tests.Add(_man)
Tests.RemoveAt(1)
MessageBox.Show(Tests(1).ToString)
End Sub
End Class
Номер ответа: 7
Автор ответа:
-=Fenix=-
Вопросов: 33
Ответов: 81
Профиль | | #7
Добавлено: 10.03.07 20:57
А при такой структуре как изменять значения эелемента, т.е. как сейчас к примеру изменить age у Васи?
Номер ответа: 8
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #8
Добавлено: 10.03.07 21:00
Tests(0).Age=25
Номер ответа: 9
Автор ответа:
-=Fenix=-
Вопросов: 33
Ответов: 81
Профиль | | #9
Добавлено: 10.03.07 21:03
ха, пишет ошибку +)
Номер ответа: 10
Автор ответа:
-=Fenix=-
Вопросов: 33
Ответов: 81
Профиль | | #10
Добавлено: 10.03.07 21:07
Я уже пробывал и так и сяк +)
Ошибка : Expression is value and therefore cannot be the target of an assignment.
Номер ответа: 11
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #11
Добавлено: 10.03.07 21:08
 im myMan As Man = Tests(0)
myMan.Age = 25
Номер ответа: 12
Автор ответа:
-=Fenix=-
Вопросов: 33
Ответов: 81
Профиль | | #12
Добавлено: 10.03.07 21:11
но всёже это не изменяет значение в массиве Test(0).Age =(
Номер ответа: 13
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #13
Добавлено: 10.03.07 21:14
Вообще.. все книги рекомендуют отказаться от использования структур из за особенностей их хранения в памяти..
Поэтому предпочтительнее вместо структуры использовать класс.. меньше хлопот будет..
Номер ответа: 14
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #14
Добавлено: 10.03.07 21:15
Конечно не изменит.. это же структура! Она не является ссылочным типом..
именно об этом я только что и говорил...
Номер ответа: 15
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #15
Добавлено: 10.03.07 21:17
А если будешь юзать класс, то все будет именно так, как ты и предполагаешь..