【问题标题】:Finding lists depending on their unique members根据其唯一成员查找列表
【发布时间】:2015-12-22 20:57:00
【问题描述】:

我是 C# 新手,我遇到了问题,在网站上找不到答案。我有几个列表,它们都包含 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

【问题讨论】:

  • 还有到目前为止你尝试了什么?也显示你的代码。
  • 我的代码无关紧要,因为它们都不起作用,我想改变解决这个问题的方法。我只是想了解是否有其他方法可以解决此问题。谢谢

标签: c# list


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果你从这个数据开始:

    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;
            });
    

    会返回这个结果:

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多