Как удалить элемент из массива структуры в C # - PullRequest
0 голосов
/ 22 мая 2011

У меня есть структура в C #, и я определяю и массив массив моей структуры на основе моего кода, который я выражаю здесь.Я добавляю элементы в свой список массивов, но мне нужно также удалить несколько строк из моего списка.Не могли бы вы помочь мне, как я могу удалить элемент или элементы из моего списка массивов структур:

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. Спасибо.

Ответы [ 4 ]

5 голосов
/ 22 мая 2011

Массивы представляют собой структуры данных фиксированной длины.

Вам потребуется создать новый массив, размер которого на один меньше исходного, и скопировать в него все элементы, кроме того, который вы хотите удалить, и начать использовать новый массив.вместо оригинала.

Почему бы не использовать вместо него List<T>?Это динамическая структура, которая позволяет добавлять и удалять элементы.

1 голос
/ 22 мая 2011

Вам нужно будет перемещать элементы и изменять размер массива (что дорого), так как там есть некоторая сложность, вы захотите скрыть его в классе, который просто представляет коллекцию, не раскрывая детали реализации того, как она хранится.К счастью, Microsoft уже предоставила класс, который делает именно это, и называется List<T>, который наряду с несколькими другими типами коллекций в пространстве имен System.Collections.Generic отвечает наиболее распространенным потребностям коллекций.

В качестве дополнительного примечания, вы должны использовать автосвойства вместо тривиального стиля свойства, который вы

0 голосов
/ 22 мая 2011

Если вы действительно, действительно хотите использовать массивы и перемещать объекты, вот несколько примеров того, как это сделать:

{
    // 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;
}
0 голосов
/ 22 мая 2011

Это невозможно, потому что массив - это блок элементов фиксированного размера.Поскольку структуры являются типами значений, а не ссылочными типами, вы также не можете просто установить элемент zo null.Один из вариантов - создать новый меньший массив и скопировать оставшиеся значения в новый массив.Но лучшим подходом, по моему мнению, было бы использование списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...