如何枚举Linq结果?

时间:2010-10-29 17:58:29

标签: c# .net linq string

参考此主题:Minimize LINQ string token counter 并使用以下提供的代码:

string src = "for each character in the string, take the rest of the " +
             "string starting from that character " +
             "as a substring; count it if it starts with the target string";

var results = src.Split()               // default split by whitespace
                 .GroupBy(str => str)   // group words by the value
                 .Select(g => new
                              {
                                  str = g.Key,      // the value
                                  count = g.Count() // the count of that value
                              });

我需要枚举所有值(关键字和出现次数)并将它们加载到NameValueCollection中。由于我的林克知识非常有限,无法弄清楚如何制作它。请指教。感谢。

3 个答案:

答案 0 :(得分:5)

我不会猜到为什么你要把任何东西放在NameValueCollection中,但是有什么理由

foreach (var result in results)
    collection.Add(result.str, result.count.ToString());

还不够吗?

(编辑:将访问者更改为Add,这可能更适合您的使用案例。)

如果答案是“不,那就有效”,你应该停下来,弄清楚上面的代码在你的项目中使用它之前到底是做什么的。

答案 1 :(得分:2)

看起来您的特定问题可以轻松使用Dictionary而不是NameValueCollection。我忘记了这是否是正确的ToDictionary语法,但只是google ToDictionary()方法:

Dictionary<string, int> useADictionary = results.ToDictionary(x => x.str, x => x.count);

答案 2 :(得分:1)

您当然需要Dictionary而不是NameValueCollection。重点是显示唯一标记(string s)以及每个标记的出现次数(int),是吗?

NameValueCollection是一个特殊用途的集合,需要字符串,键和值 - Dictionary<string, int>是将唯一string键与其对应的{{1}相关联的主流.Net方式}值。

查看各种System.Collections namespaces,了解每个人要实现的目标。通常情况下,int是最常见的,多System.Collections.Generic用于多线程程序。