katumbamartin Ответов: 3

Удаление пустых элементов из массива


Привет
у меня есть

string[] myArray=new []{"1","2","3",""};

Как я могу конвертировать/форматировать myArray так, чтобы он выглядел следующим образом

string[] myArray=new []{"1","2","3"};

В других работах, как я могу программно удалить последнюю пустую запись

Я предполагаю, что не знаю индекса пустой записи.

Заранее спасибо

Мартин

BillWoodruff

Является ли это абсолютно необходимым, вы должны использовать массив строк здесь ?

Sergey Alexandrovich Kryukov

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

3 Ответов

Рейтинг:
2

Member 14188764

вы можете сделать это легко Анс простой способ

myArray = myArray.Где(x => !строка.IsNullOrEmpty(x)).Метод toArray();


Richard Deeming

Это может быть проще, но оно будет иметь значительно худшую производительность, чем Решение 1 для больших массивов.

Оба ToList и ToArray имейте оптимизацию на месте, когда входные данные реализуются ICollection<T> Но последовательность возвращалась из Where не реализует ICollection<T>, так ToArray должен начинаться с массива из 4 элементов; каждый раз, когда он достигает конца, он создает новый массив в два раза большего размера и копирует в него старый массив; и, наконец, он должен создать еще один новый массив правильного размера и скопировать элементы в него.

Member 14363752

Я должен был присоединиться к проекту Code только для того, чтобы похвалить вас!

У меня есть очень большой, переменный по размеру, строковый массив, который записывается в файл в проекте прямого банковского вклада. Теперь я использую ваше решение как дополнительный механизм обработки ошибок.
Спасибо.

Рейтинг:
12

OriginalGriff

У C# нет прямого способа сделать это, но... ты можешь попробовать:

string[] x = new string[] { "1", "", "2", "", "3", "4" };
List<string> y = x.ToList<string>();
y.RemoveAll(p => string.IsNullOrEmpty(p));
x = y.ToArray()


Sergey Alexandrovich Kryukov

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

OP, возможно, придется подумать об использовании коллекций.
Во всяком случае, мои 5.

--СА

Sergey Alexandrovich Kryukov

Поэтому я добавил альтернативный ответ...
--СА

Рейтинг:
0

Sergey Alexandrovich Kryukov

Я бы посоветовал вам пересмотреть свой дизайн с учетом присущих затрат на удаление или вставку элемента из/в массив. Это то же самое, что создание совершенно нового массива и создание копии всех данных. Производительность может пострадать слишком сильно. Использование списка в качестве временного объекта не решит проблему.

Итак, рассмотрите возможность использования контейнеров в первую очередь. Вы можете использовать, скажем System.Collections.Generic.List<> пожалуйста , смотрите http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx[^].

—СА


Amir Mahfoozi

+5

Sergey Alexandrovich Kryukov

Спасибо, Амир.
--СА