按C#中的int范围过滤字典

时间:2014-01-02 13:36:31

标签: c# dictionary

我有一本字典

Dictionary<int,Observation>

我想创建一个新的字典,例如键的范围是1到10,000。

我得到的是

Dictionary<int,Observation> source;
Dictionary<int,Observation> newDict = new Dictionary<int,Observation>();
for (int i = 0; i < 10000; i++)
{
    newDict[i] = new Observation(source[i]);         
}

是否有任何有效的方法来创建一个新词典,其中只包含适合给定范围(oft,ofcourse)的键?

我是LINQ的新手,但我想有办法实现它。

3 个答案:

答案 0 :(得分:4)

您可以使用Take Extension Method

var newDict = source.OrderBy(d => d.Key)
                    .Take(10000)
                    .ToDictionary(d=>d.Key,d=>d.Value);

您也可以像这样使用Skip Extension method

var newDict = source.OrderBy(d => d.Key)
                    .Skip(1000).Take(10000)
                    .ToDictionary(d=>d.Key,d=>d.Value);

那将Skip前1000个元素然后获取10000条记录。

或者您可以使用Where获取特定范围:

var newDict = source.Where(d => d.Key >= start && d.Key <= end)
                    .ToDictionary(d => d.Key,d => d.Value);

答案 1 :(得分:2)

使用Where(您想要的任何条件)和<{p>之后的ToDictionary

newDict = source.Where(x => x.Key < 10000 && x.Key > 10)
                                      .ToDictionary(x=>x.Key,x=>x.Value);

答案 2 :(得分:0)

尝试:

var newDict=source.Keys.Where(c=> c >= rangeMinimum && c<=rangeMaximum).ToDictionary(c=>c,c=>source[c]);

其中rangeMinimum和rangeMaximum是范围的开始和结束。在您的示例中,0和9999。