我刚接触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])
答案 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));