#c# #arrays #visual-studio-2008
#c# #массивы #visual-studio-2008
Вопрос:
У меня есть структура в C #, и я определяю список массивов моей структуры на основе моего кода, который я выражаю здесь. Я добавляю элементы в свой список массивов, но мне также нужно удалить несколько строк из моего списка. Не могли бы вы мне помочь, как я могу удалить элемент или элементы из моего списка struct array:
public struct SwitchList
{
public int m_Value1, m_Value2;
public int mValue1
{
get { return m_Value1; }
set {m_Value1 = value; }
}
public int mValue2
{
get { return m_Value2; }
set {m_Value2 = value; }
}
}
//Define an array list of struct
SwitchList[] mSwitch = new SwitchList[10];
mSwitch[0].mValue1=1;
mSwitch[0].mValue2=2;
mSwitch[1].mValue1=3;
mSwitch[1].mValue2=4;
mSwitch[2].mValue1=5;
mSwitch[2].mValue2=6;
Теперь, как я могу удалить один из моих элементов, например, элемент 1.
Спасибо.
Комментарии:
1. вы должны попробовать дженерики
Ответ №1:
Массивы — это структуры данных фиксированной длины.
Вам нужно будет создать новый массив размером на единицу меньше исходного и скопировать в него все элементы, кроме того, который вы хотите удалить, и начать использовать новый массив вместо исходного.
Почему бы не использовать List<T>
вместо этого? Это динамическая структура, которая позволяет добавлять и удалять элементы.
Ответ №2:
Вам нужно будет перемещать элементы и изменять размер массива (что дорого), поскольку здесь есть некоторая сложность, вы захотите скрыть это в классе, который просто представляет коллекцию, не раскрывая детали реализации того, как она хранится. К счастью, Microsoft уже предоставила класс, который делает именно это, под названием List<T>
, который наряду с несколькими другими типами коллекций в System.Collections.Generic
пространстве имен удовлетворяет наиболее распространенным потребностям в сборе.
в качестве дополнительного примечания вам следует использовать автоматические свойства вместо тривиального стиля свойств, который вы использовали
Ответ №3:
Это невозможно, потому что массив представляет собой блок элементов фиксированного размера. Поскольку структуры являются типами значений, а не ссылочными типами, вы также не можете просто присвоить элементу zo значение null. Одним из вариантов было бы создать новый массив меньшего размера и скопировать оставшиеся значения в новый массив. Но, на мой взгляд, лучшим подходом было бы использовать список.
Ответ №4:
Если вы действительно, действительно хотите использовать массивы и перемещать объекты, вот несколько примеров того, как это сделать:
{
// Remove first element from mSwitch using a for loop.
var newSwitch = new SwitchList[mSwitch.Length - 1];
for (int i = 1; i < mSwitch.Length; i )
newSwitch[i - 1] = mSwitch[i];
mSwitch = newSwitch;
}
{
// Remove first element from mSwitch using Array.Copy.
var newSwitch = new SwitchList[mSwitch.Length - 1];
Array.Copy(mSwitch, 1, newSwitch, 0, mSwitch.Length - 1);
mSwitch = newSwitch;
}