在没有分组的情况下计算锯齿状列表的所有子列表中子列表的前x个元素的出现次数

时间:2016-01-29 05:52:47

标签: c# linq list dictionary jagged-arrays

我有一个参差不齐的名单。

twig:
    form_themes:
        # Bootstrap:
        - bootstrap_3_layout.html.twig

我也有一个LINQ命令可以执行我想要的但是使用分组。

var jaggedList = new List<List<string>>()
{ cc kk ww }
{ cc kk aa }
{ cc oo ll }
{ cc jj oo }
{ ww oo kk }
{ ww oo gg }
{ ww gg kk }
{ kk ll oo }
{ ll kk nn }
{ mm nn oo }
{ mm nn jj }

现在我希望编辑此命令,以便它不会分组。

1 个答案:

答案 0 :(得分:0)

我不确定这是你想要的,请检查一下:

P.S。现在,dic变量实际上并不是字典,因为如果你想要与jaggedList相同的计数,那么将存在不允许字典集合的关键共同体。

    var n = 2;

    var jaggedList = new List<List<string>>(){
            new List<string>{ "cc", "kk", "ww" },
            new List<string>{ "cc", "kk", "aa" },
            new List<string>{ "cc", "oo", "ll" },
            new List<string>{ "cc", "jj", "oo" },
            new List<string>{ "ww", "oo", "kk" },
            new List<string>{ "ww", "oo", "gg" },
            new List<string>{ "ww", "gg", "kk" },
            new List<string>{ "kk", "ll", "oo" },
            new List<string>{ "ll", "kk", "nn" },
            new List<string>{ "mm", "nn", "oo" },
            new List<string>{ "mm", "nn", "jj" }
    };

    Func<IEnumerable<string>, int, string> getKey = (col, num) => col.Take(num).Aggregate((a, b) => a + " " + b);

    var dic = jaggedList.Select(x => {
        var key = getKey(x, n);
        return new { 
            key,
            count = jaggedList.Where(y => getKey(y, n) == key).Count()
        };
    }).ToList();