c#LINQ Distinct()在多级列表上

时间:2014-09-11 13:48:53

标签: c# linq

我有一个List<List<int>>,其中包含以下值:

[1] = 1,2
[2] = 4,5,6
[3] = 1,3

我想要做的是检索具有唯一值的简单列表=&gt; 1,2,3,4,5,6(第一名在原始名单中重复)。

如果是1D List,我会用

variable.Select(n=>n).Distinct();

然而,当我尝试使用

variable.Select(n=>n.Select(x=>x)).Distinct();

我有2D列表(我猜有唯一值)。我怎么解决这个问题? 感谢

3 个答案:

答案 0 :(得分:8)

您可以将SelectManyDistinct

一起使用
var uniqueList = list.SelectMany(x => x).Distinct().ToList();

SelectManyList<List<int>>压平为IEnumerable<int>Distinct消除了重复项。

答案 1 :(得分:1)

private static void Main()
{
    List<List<int>> xss = new List<List<int>>()
    {
        new List<int>() {1, 2},
        new List<int>() {4, 5, 6},
        new List<int>() {1, 3}
    };
    var xs = xss.SelectMany(x => x).Distinct();
    Console.WriteLine(string.Join(" ",xs));
}

答案 2 :(得分:1)

如果你想要一个不同的整体整数,你可以SelectMany,但是如果你想要distinc列表,你可以做这样的事情;

void Main()
{
    List<List<int>> xss = new List<List<int>>()
    {
        new List<int>() {1, 2},
        new List<int>() {1, 2},
        new List<int>() {1, 2},
        new List<int>() {4, 5, 6},
        new List<int>() {1, 3}
    };

    xss.Select (x => string.Join(",", x)).Distinct();

}