如何在C#中比较多维数组?
如何比较多维数组?只是对/错如何在C#中比较多维数组?,c#,arrays,compare,multidimensional-array,C#,Arrays,Compare,Multidimensional Array,如何比较多维数组?只是对/错 double[,] data1 = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; double[,] data2 = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; //bool compare = data1.SequenceEqual(data2); 有没有办法比较2d数组和1d数组 data1.SequenceE
double[,] data1 = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
double[,] data2 = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
//bool compare = data1.SequenceEqual(data2);
有没有办法比较2d数组和1d数组
data1.SequenceEqual(data2);
我必须每秒钟比较一次,所以最简单的方法会很好。非常感谢。在linq中,多维数组可以用作一维可枚举数组。您只需检查所有尺寸的长度。这个片段应该足够了:
var equal =
data1.Rank == data2.Rank &&
Enumerable.Range(0,data1.Rank).All(dimension => data1.GetLength(dimension) == data2.GetLength(dimension)) &&
data1.Cast<double>().SequenceEqual(data2.Cast<double>());
var相等=
data1.Rank==data2.Rank&&
Enumerable.Range(0,data1.Rank).All(维度=>data1.GetLength(维度)==data2.GetLength(维度))&&
data1.Cast().SequenceEqual(data2.Cast());
您可以这样做
data1.SequenceEqual(data2);
您可以使用
.Cast
您还可以尝试使用2个for循环来解决它,并将它们与计数器进行比较 也许是这样的
for(int counter1 = 0; counter1 < data1.GetLength(0); counter1++)
{
for(int counter2 = 0; counter2 < data2.GetLength(1); counter2++)
{
if(data1[counter1, counter2] == data2[counter1, counter2])
{
bool isEqual = true;
}
}
}
for(int counter1=0;counter1
比较二维阵列的通用扩展方法:
public static bool SequenceEquals<T>(this T[,] a, T[,] b) => a.Rank == b.Rank
&& Enumerable.Range(0, a.Rank).All(d=> a.GetLength(d) == b.GetLength(d))
&& a.Cast<T>().SequenceEqual(b.Cast<T>());
publicstaticboolsequenceequals(这个T[,]a,T[,]b)=>a.Rank==b.Rank
&&可枚举范围(0,a.Rank).All(d=>a.GetLength(d)==b.GetLength(d))
&&a.Cast().SequenceEqual(b.Cast());
@user287107是的,正是我要找的!谢谢!多维数组不包含“SequenceEqual”的定义。我相信这就是作者寻找问题答案的原因。有几点是错误的:1)isEqual在其作用域的末尾死亡2)我们想检测至少一个false来断言数组不相等,所以我们想检查值是否不同。只需测试你的代码。
for(int counter1 = 0; counter1 < data1.GetLength(0); counter1++)
{
for(int counter2 = 0; counter2 < data2.GetLength(1); counter2++)
{
if(data1[counter1, counter2] == data2[counter1, counter2])
{
bool isEqual = true;
}
}
}
public static bool SequenceEquals<T>(this T[,] a, T[,] b) => a.Rank == b.Rank
&& Enumerable.Range(0, a.Rank).All(d=> a.GetLength(d) == b.GetLength(d))
&& a.Cast<T>().SequenceEqual(b.Cast<T>());