Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq groupby列表匹配和计数_C#_Json_Linq - Fatal编程技术网

C# Linq groupby列表匹配和计数

C# Linq groupby列表匹配和计数,c#,json,linq,C#,Json,Linq,我有一行json,我将其反序列化并创建列表列表: var json = @"[{'names': ['a','b']} ,{'names': ['z','y','j']} ,{'names': ['a','b']}]"; var json_converted = JsonConvert.DeserializeObject<List<RootObject>>(json); var namelist = json_converted 有什么建议吗?您可以根据列表项按相同顺

我有一行json,我将其反序列化并创建列表列表:

var json = @"[{'names': ['a','b']} ,{'names': ['z','y','j']} ,{'names': 
['a','b']}]";
var json_converted = JsonConvert.DeserializeObject<List<RootObject>>(json);
var namelist = json_converted

有什么建议吗?

您可以根据列表项按相同顺序生成的
字符串对其进行分组。假设名称中不允许使用
“|”
字符,则可以执行以下操作:

var namelist = json_converted
    .GroupBy(n => string.Join("|", n.names.OrderBy(s => s)))
    .Select(g => new {
        Name = g.First().names
    ,   Count = g.Count()
    });
这种方法从列表
[“a”,“b”]
[“b”,“a”]
中构造一个字符串
“a | b”
,并使用该字符串对内容进行分组


由于键由有序名称组成,
g.First()。用作组中所有元素的
Name
名称的顺序可能不同。

您可以为名称列表编写一个比较器

public class NamesComparer : IEqualityComparer<IEnumerable<string>>
{
    public bool Equals(IEnumerable<string> x, IEnumerable<string> y)
    {
        //do your null checks
        return x.SequenceEqual(y);
    }

    public int GetHashCode(IEnumerable<string> obj)
    {
        return 0;
    }
}

谢谢正是我需要的!
public class NamesComparer : IEqualityComparer<IEnumerable<string>>
{
    public bool Equals(IEnumerable<string> x, IEnumerable<string> y)
    {
        //do your null checks
        return x.SequenceEqual(y);
    }

    public int GetHashCode(IEnumerable<string> obj)
    {
        return 0;
    }
}
var namelist = json_converted.GroupBy(n => n.names, new NamesComparer())
                             .Select(i => new { name = i.Key, Count = i.Count() });