根据其独特成员查找列表

时间:2015-12-22 10:12:41

标签: c# list

我是C#的新手,我遇到了问题但在网站上找不到答案。我有几个List,所有这些都包含3个项目。

List1  :  1  2 3         
List2  :  0  6 1         
List3  :  1  2 6
List4  :  6  1 2
List4  :  2  3 6
List5  :  6  2 3
List6  :  3  6 4
List7  :  4  6 5
List8  :  5  6 7
List9  :  8  6 12
List10 :  10 6 13
List11 :  4  8  6
List12 :  11 7 13
List13 :  5 10 12
List14 :  10 12 6 

我想选择包含唯一数字的列表。结果应该是这样的。我需要选择List1,List7和List12,因为这些列表中的任何成员都相互对应。我尝试了一些递归循环但失败了。任何帮助都会得到满足。感谢。

---------------------------
1 2 3    4 6 5    11 7 13 
---------------------------
List1    List7    List12

2 个答案:

答案 0 :(得分:3)

好吧,列表编号1将始终有新的数字...我将创建一个已知数字的辅助列表,遍历提供的列表,检查是否与已知数字匹配,如果没有匹配,请将其添加保留清单...非常基本的东西......我相信还有一种方法可以用LINQ来做...

不会发布代码,因为我认为这是一个家庭作业......我们不会在这里做其他人的作业......

答案 1 :(得分:0)

如果您从这些数据开始:

var xss = new[]
{
    new [] { 1, 2, 3 },
    new [] { 0, 6, 1 },
    new [] { 1, 2, 6 },
    new [] { 6, 1, 2 },
    new [] { 2, 3, 6 },
    new [] { 6, 2, 3 },
    new [] { 3, 6, 4 },
    new [] { 4, 6, 5 },
    new [] { 5, 6, 7 },
    new [] { 8, 6, 12 },
    new [] { 10, 6, 13 },
    new [] { 4, 8,  6 },
    new [] { 11, 7, 13 },
    new [] { 5, 10, 12 },
    new [] { 10, 12, 6 },
};

然后这个查询:

var query =
    xss.Skip(1).Aggregate(
        xss.Take(1).ToList(),
        (yss, xs) =>
        {
            if (yss.All(ys => ys.Except(xs).SequenceEqual(ys)))
            {
                yss.Add(xs);
            }
            return yss;
        });

将返回此结果:

result