C # - winforms - получение текстов определенного столбца в виде списка в виде массива - PullRequest
2 голосов
/ 09 июня 2011

возможно ли получить текстовые значения определенного столбца в виде списка в виде массива без использования функции цикла?Допустим, у меня есть просмотр списка содержит 2 столбца и 5000 записей.я хочу получить все тексты только в колонке 2, но без использования цикла.Я знаю, что могу сделать это с помощью цикла, но это заняло бы целую вечность, если бы у меня было более 5000 записей.

есть идеи?

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Я чувствую вашу боль, и лично я испытал, насколько медленным может быть ListViewItemsCollection.

Вы можете получить доступ ко второму столбцу ListView без цикла for, какэто:

string[] column1 = this.listView1.Items.Cast<ListViewItem>().Select(item => item.SubItems[1].Text).ToArray();

, но это не быстрее, чем цикл for.На самом деле это немного медленнее!Другие приемы, такие как попытка использования ListViewItemsCollection.CopyTo, также приводят к сбою.

Основная проблема с ListView заключается в том, что он патологически медленен при использовании в качестве структуры данных.Свойство ListView.Items выглядит как структура данных, и вы можете использовать как структуру данных, но при любом ее разрезании:

  • данные поступают вно это не получается быстро .

Так что, если вы последуете совету alexD, вы обнаружите, что real структура данных превзойдет ListViewItemCollectionна порядки.Мораль этой истории в том, что если вы хотите быстро запросить данные ListViewItemCollection, у вас нет другого выбора, кроме как сохранить быструю копию вне ListView.Практически любая структура данных подойдет, например,

  • a string[][]
  • a string[,]
  • a List<List<string>>
  • a List<string[]> или даже
  • a List<Tuple<string, string>>.

Все они могут хранить те же данные, что и два столбца ListView, и будут мгновенно быстрыми по сравнению с использованием ListView как структура данных.Это неудобно, но это цена, которую мы должны заплатить за скорость.

0 голосов
/ 09 июня 2011

Не считывайте данные напрямую из текстового файла в представление списка ... сохраняйте их в структуре данных, например ArrayList, которая будет поддерживать порядок вставки элементов.

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