我是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
答案 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;
});
将返回此结果: