3

有没有办法从 NameValueCollection 中提取与特定模式/命名约定有关的键,而不必遍历集合中的每个值?

4

3 回答 3

6

名称值集合并非旨在特别有效地进行这样的搜索。无论您使用哪种方法,它都必须经过所有项目。你可以使用 LINQ;就像是:

col.Keys.OfType<string>().Where(s => s.StartsWith("SomeString"))
于 2009-08-07T22:30:22.743 回答
2

您也许可以结合使用 regex 和 linq 魔术,但在所有这一切的底部,您需要遍历每个值以检查它们。如果您使用 linq,则不需要编写迭代,但在幕后它们仍然会完成。

如果您真的需要比这更快的速度,您需要查看您所使用的模式/命名约定类型,然后制作可搜索的数据结构以满足这些需求。

于 2009-08-07T22:32:23.613 回答
0

两条评论:

1)你的问题太模糊了。有多种数据结构,如后缀和前缀尝试、红黑树上的变体等,支持高效搜索。您的问题的有用答案取决于您正在搜索的模式/命名约定的类型。发布一些示例输入和预期输出。

2)除非你真的需要它,否则实现一个复杂的数据结构是没有意义的。您应该问自己的第一个问题是您是否真的需要效率:对于包含 < 50,000 个项目的集合,我真的怀疑您会在内存、cpu 或性能方面看到明显的差异,而不是使用简单的数据结构搜索键线性搜索。

于 2009-08-07T22:34:49.053 回答