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

标签 c# winforms arrays listview

是否可以在不使用循环函数的情况下以数组形式获取 ListView 中特定列的文本值?可以说我有一个 ListView 包含 2 列和 5000 条记录。我想要的是仅获取第 2 列下的所有文本,但不使用循环。我知道我可以用一个循环来完成这个,但如果我有 5000 多条记录就需要很长时间。

有什么想法吗?

最佳答案

我感受到你的痛苦,我亲 body 验过 ListViewItemsCollection 有多慢可以。

可以访问 ListView 的第二列没有像这样的 for 循环:

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

但这并不比 for 循环快。事实上它有点慢!其他技巧,例如尝试使用 ListViewItemsCollection.CopyTo也惨败。

ListView 的一个主要问题当用作数据结构时,它在病态上很慢。属性(property)ListView.Items 看起来像一个数据结构,您可以像数据结构一样使用它,但您可以按照任何方式分割它:

  • 数据输入但输出速度不快

因此,如果您听从 alexD 的建议,您会发现真实 数据结构的性能优于 ListViewItemCollection。按数量级。这个故事的寓意是,如果您想查询 ListViewItemCollection 中的数据快速,你别无选择,只能在 ListView外部 保留一份快速副本.实际上任何数据结构都可以,例如

  • 一个string[][]
  • 一个string[,]
  • 一个List<List<string>>
  • 一个List<string[]>甚至
  • 一个List<Tuple<string, string>> .

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

关于C# - winforms - 以数组形式获取 ListView 中特定列的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6287615/

相关文章:

javascript - 数组不遍历每个元素

计算数组元素的总和

c# - 在不同形式的 dataGridView 中添加列和行

c# - session 的 Azure WebJob ServiceBusTrigger

c# - 在 Parallel.For 完成作业后引发事件

c# - UITextView - 设置边框颜色

.NET WinForms 自定义控件 : how to get a reference to the containing form

c# - 如何检查窗口在 Windows 窗体中是否真的可见?

PHP:使用数组在另一个多维数组中获取值

c# - 文件存在 c# visual studio 2017