gpt4 book ai didi

c# - 列表始终不包含数组,即使是

转载 作者:太空宇宙 更新时间:2023-11-03 18:06:17 25 4
gpt4 key购买 nike

我正在尝试检查数组列表是否包含具有相反顺序因子的数组,如果没有,请添加它们:

var faclist = new List<int[]>();
var factors = new int[2] {i, j};
if (!faclist.Contains(factors.Reverse()))
{
faclist.Add(factors);
}


但是,即使存在具有反向因子的数组,此代码也始终不正确。

最佳答案

.Contains适用于.Equals方法。默认情况下,如果两个实例(引用)相同,则.Equals方法仅返回true

解决这个问题的一种可能方法-如果因子数量固定-使用Tuple<int,int>。您可以使用以下命令在`Tuple类上定义Reverse方法:

public static class Foo {

public static Tuple<T2,T1> Reverse<T1,T2> (this Tuple<T1,T2> tuple) {
return new Tuple<T2,T1>(tuple.Item2,tuple.Item1);
}

}


然后简单地用:

Tuple<int,int> t = new Tuple<int,int>(3,5);
Tuple<int,int> t2 = t.Reverse();


如果没有,您可以定义一个包装类,按照 here所述执行相等性检查。

另一个替代方法是在 @xanatos answer所述的 .Contains方法中自己提供一个相等检查器。

演示:

$ csharp
Mono C# Shell, type "help;" for help

Enter statements below.
csharp> var t1 = new Tuple<int,int>(3,2);
csharp> var t2 = new Tuple<int,int>(3,2);
csharp> t1.Equals(t2);
true
csharp> int[] t1 = new int[] {3,2};
csharp> int[] t2 = new int[] {3,2};
csharp> t1.Equals(t2);
false

关于c# - 列表始终不包含数组,即使是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28674358/

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