我有一本字典
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的新手,但我想有办法实现它。
答案 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。