是否可以在不使用循环函数的情况下以数组形式获取 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/