在 C# 中按 int 范围筛选字典



我有字典

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。

最新更新