我有字典
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]);
}
有没有有效的方法来创建一个只包含适合给定范围(当然是整数)的键的新字典?
我是 LINQ 的新手,但我想有一种方法可以做到这一点。
您可以使用 Take Extension Method 来实现此目的:
var newDict = source.OrderBy(d => d.Key)
.Take(10000)
.ToDictionary(d=>d.Key,d=>d.Value);
您也可以像这样使用跳过扩展方法:
var newDict = source.OrderBy(d => d.Key)
.Skip(1000).Take(10000)
.ToDictionary(d=>d.Key,d=>d.Value);
这将Skip
前 1000 个元素,然后获取 10000 条记录。
或者,您可以使用"从何处获取特定范围":
var newDict = source.Where(d => d.Key >= start && d.Key <= end)
.ToDictionary(d => d.Key,d => d.Value);
使用Where
(使用您想要的任何条件)并在之后使用ToDictionary
newDict = source.Where(x => x.Key < 10000 && x.Key > 10)
.ToDictionary(x=>x.Key,x=>x.Value);
尝试:
var newDict=source.Keys.Where(c=> c >= rangeMinimum && c<=rangeMaximum).ToDictionary(c=>c,c=>source[c]);
其中范围最小值和范围最大值是范围的开始和结束。在您的示例中,0 和 9999。