如何通过linq在c#中获取字典的前N个值?

时间:2011-12-12 06:31:12

标签: c# linq dictionary

Dictionary<string,List<string>> dict =new Dictionary<string,List<string>>(){...};

我需要一个由LINQ过滤的字典类型的结果;过滤条件为:if TValue's count > CONST_MAX, then TValue only return top CONST_MAX items

4 个答案:

答案 0 :(得分:3)

Dictionary<TKey, TValue>无法保持秩序。您可能希望使用SortedDictionary<TKey, TValue>获取前x个项目。

答案 1 :(得分:2)

由于你的问题不清楚,我假设你正在寻找一个具有相同键的新词典,但只有每个值中的前N个项目:

var firstN = dict.ToDictionary(
                  kvp => kvp.Key,
                  kvp => kvp.Value.Take(CONST_MAX).ToList());

答案 2 :(得分:1)

尝试:如果您要比较dic的值

return mydic
    .Where(p => p.value == myvalue)
    .ToDictionary(p => p.Key, p => p.Value);

答案 3 :(得分:1)

使用Take()方法

       Dictionary<string, string> colours = new Dictionary<string, string>();

        colours.Add("1", "Red");
        colours.Add("2", "Black");
        colours.Add("3", "Green");
        colours.Add("4", "Yellow");

        var top2 = colours.Take(2);

        foreach (KeyValuePair<string, string> colour in top2)
        {
            Console.WriteLine("{0}-{1}", colour.Key, colour.Value);
        }