C# - winforms - 以数组的形式获取listview中特定列的文本

时间:2011-06-09 02:53:53

标签: c# winforms arrays listview

是否可以在不使用循环函数的情况下以数组的形式获取列表视图中特定列的文本值?假设我有一个listview包含2列和5000条记录。我想要的是只获得第2列下的所有文本,但不使用循环。我知道我可以通过一个循环实现这个目标但是如果我有5000多个记录则需要很长时间。

任何想法?

2 个答案:

答案 0 :(得分:2)

我感受到了你的痛苦,而且我亲身经历过ListViewItemsCollection可能有多慢。

可以访问ListView的第二列,而不是像这样的for循环:

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

但这并不比for循环快。实际上它有点慢!尝试使用ListViewItemsCollection.CopyTo等其他技巧也会失败。

ListView的一个主要问题是当用作数据结构时,病理上很慢。属性ListView.Items 看起来像,就像数据结构一样,您可以使用它像数据结构一样,但无论如何都要切片:

  • 数据进入,但没有快速出现

因此,如果您遵循alexD的建议,您会发现真实数据结构的性能优于ListViewItemCollection数量级。故事的寓意是,如果您想快速查询ListViewItemCollection中的数据,除了保持ListView之外的快速复制之外别无选择。实际上任何数据结构都可以,例如

  • a string[][]
  • a string[,]
  • a List<List<string>>
  • a List<string[]>甚至
  • a List<Tuple<string, string>>

与使用ListView作为数据结构相比,这些数据都可以存储与两列ListView相同的数据,并且会立即快速生成。这是不方便的,但这是我们必须为速度付出的代价。

答案 1 :(得分:0)

不要直接从文本文件中将数据读入列表视图...将其存储在像ArrayList这样的数据结构中,这将保持插入元素的顺序。