使用Linq从Dictionary <string,int =“”>?

时间:2018-07-26 23:45:45

标签: c# linq

我刚接触C#,并且尝试使用LINQ(或其他方法?)来选择Dictionary<string, int>对象的子集,其中值(int是大于5。

+-------------+------------+
| Key(string) | Value(int) |
+-------------+------------+
|         000 |          0 |
|         111 |          1 |
|         222 |          2 |
|         333 |          3 |
|         444 |          4 |
|         555 |          5 |
|         666 |          6 |
|         777 |          7 |
|         888 |          8 |
|         999 |          9 |
+-------------+------------+

我使用以下代码创建了上面的字典对象,以简单地用一些数据填充字典:

        Dictionary<string, int> linkCounter = new Dictionary<string, int>();

        for (int i=0; i<=9; i++)
        {
            string key = i.ToString() + i.ToString() + i.ToString();
            for (int n=0; n<=i; n++)
            {
                if (linkCounter.ContainsKey(key))
                {
                    linkCounter[key]++;
                }
                else
                {
                    linkCounter.Add(key, 0);
                }
            }
        }

我该怎么做等同于:

  

foreach (KeyValuePair<string, int> kvp in linkCounter [其中kvp.value> 5] )

3 个答案:

答案 0 :(得分:1)

添加

using System.Linq;

然后使用Where

var subset = linkCounter.Where(x => x.Value > 5);
foreach(KeyValuePair<string, int> kvp in subset)
{
   // your code
}

答案 1 :(得分:1)

var subset = linkCounter
    .Where(w => w.Value > 5)
    .ToDictionary(k => k.Key, v => v.Value);

就像上面的答案中提到的那样,当您对字典进行操作时,Linq返回的是IEnumerable<kvp<K,V>>。如果您想找回字典,可以使用我在上面方法中使用的方法将Enumerable转换回字典。

答案 2 :(得分:0)

类似这样的东西:

var keyValueSet = linkCounter.Where(p => p.Value > 5);
keyValueSet.ForEach(i => Console.WriteLine(i.Key + ": " + i.Value));