gpt4 book ai didi

c# - 如何删除具有 2 个公共(public)元素的数组/结构列表的元素

转载 作者:太空狗 更新时间:2023-10-29 22:15:48 24 4
gpt4 key购买 nike

有一个结构列表或者一个数组列表,每个列表都有 3 个元素,比如

12 8 7
5 1 0
7 3 2
10 6 5
6 2 1
8 4 3
6 1 5
7 2 6
8 3 7
9 4 8
11 7 6
13 9 8
11 6 10
12 7 11
13 8 12
14 9 13

我想删除列表中有 2 个公共(public)子项的项目,在我想删除的示例中

5  1 0
6 2 1
6 1 5
7 3 2
7 2 6
8 4 3
8 3 7 has 2 same items as row 7,3,2
9 4 8 has 2 same items as row 8,4,3
10 6 5
11 7 6
11 6 10 has 2 same items as row 11,7,6
12 7 11 has 2 same items as row 11,7,10
12 8 7
13 8 12
13 9 8
14 9 13 has 2 same items as row 13,9,8

因此,我正在考虑使用结构方法按元素 A 对列表进行排序,然后循环和比较元素,如果当前元素有 2 个值等于列表中的其他元素,我不会将它添加到结果列表中,但是我卡住了,不知道是否有更好的方法

struct S
{
public int A;
public int B;
public int C;
}

public void test()
{
List<S> DataItems = new List<S>();
DataItems.Add(new S { A = 1, B = 2, C=3} );
DataItems.Add(new S { A = 12, B = 8, C = 7 });
DataItems.Add(new S { A = 5, B = 1, C = 0 });
DataItems.Add(new S { A = 7, B = 3, C = 2 });
DataItems.Add(new S { A = 10, B = 6, C = 5 });
DataItems.Add(new S { A = 6, B = 2, C = 1 });
DataItems.Add(new S { A = 8, B = 4, C = 3 });
DataItems.Add(new S { A = 6, B = 1, C = 5 });
DataItems.Add(new S { A = 7, B = 2, C = 6 });
DataItems.Add(new S { A = 8, B = 3, C = 7 });
DataItems.Add(new S { A = 9, B = 4, C = 8 });
DataItems.Add(new S { A = 11, B = 7, C = 6 });
DataItems.Add(new S { A = 13, B = 9, C = 8 });
DataItems.Add(new S { A = 11, B = 6, C = 10 });
DataItems.Add(new S { A = 12, B = 7, C = 11 });
DataItems.Add(new S { A = 13, B = 8, C = 12 });
DataItems.Add(new S { A = 14, B = 9, C = 13 });
var sortedList = DataItems.OrderBy(x => x.A);
List<S> resultList = new List<S>();
for (int i = 0; i < sortedList.Count (); i++)
{
for (int j = i+1; j < sortedList.Count(); j++)
{
if (sortedList.ElementAt(i).A == sortedList.ElementAt(j).A || sortedList.ElementAt(i).A == sortedList.ElementAt(j).B || sortedList.ElementAt(i).A == sortedList.ElementAt(j).C)
{
//ONE HIT, WAIT OTHER
}
}
}
}

有没有更有效的方法来获取列表,而不是让项目包含 2 个相同的项目,而不是对解决方案进行硬编码?

5  1 0
6 2 1
6 1 5
7 3 2
7 2 6
8 4 3
10 6 5
11 7 6
12 8 7
13 8 12
13 9 8

最佳答案

给定一个项目...

{ A = 1, B = 2, C = 3 }

您有 3 种可能的组合,可以在另一项中重复,例如

AB, AC & BC which is {1, 2}, {1, 3} & {2, 3}

所以我要做的是遍历您的列表,将这些组合添加到带有分隔符 char 的字典中(首先是最小数字,因此如果 B < A,则添加 BA 而不是 AB)。所以你的字典键可能是......

"1-2", "1-3", "2-3"

现在,当您添加每个项目时,检查 key 是否已存在,如果存在,则您可以忽略该项目(不要将其添加到结果列表)。

在性能方面,这将遍历整个列表并使用字典检查具有 2 个公共(public)数字的项目。

关于c# - 如何删除具有 2 个公共(public)元素的数组/结构列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34846179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com