为了账号安全,请及时绑定邮箱和手机立即绑定

比较C#中数组的最简单方法

比较C#中数组的最简单方法

汪汪一只猫 2019-11-29 09:59:52
在Java中,Arrays.equals()可以轻松比较两个基本数组的内容(所有基本类型都可以使用重载)。C#中有这样的事情吗?有什么“神奇”的方法可以比较C#中两个数组的内容?
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

您可以使用SequenceEqual。这适用于任何IEnumerable<T>数组,而不仅仅是数组。


查看完整回答
反对 回复 2019-11-29
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

在LINQ中使用SequenceEqual。


int[] arr1 = new int[] { 1,2,3};

int[] arr2 = new int[] { 3,2,1 };


Console.WriteLine(arr1.SequenceEqual(arr2)); // false

Console.WriteLine(arr1.Reverse().SequenceEqual(arr2)); // true


查看完整回答
反对 回复 2019-11-29
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

同样对于数组(和元组),您可以使用.NET 4.0中的新接口:IStructuralComparable和IStructuralEquatable。使用它们,您不仅可以检查数组的相等性,还可以比较它们。


static class StructuralExtensions

{

    public static bool StructuralEquals<T>(this T a, T b)

        where T : IStructuralEquatable

    {

        return a.Equals(b, StructuralComparisons.StructuralEqualityComparer);

    }


    public static int StructuralCompare<T>(this T a, T b)

        where T : IStructuralComparable

    {

        return a.CompareTo(b, StructuralComparisons.StructuralComparer);

    }

}


{

    var a = new[] { 1, 2, 3 };

    var b = new[] { 1, 2, 3 };

    Console.WriteLine(a.Equals(b)); // False

    Console.WriteLine(a.StructuralEquals(b)); // True

}

{

    var a = new[] { 1, 3, 3 };

    var b = new[] { 1, 2, 3 };

    Console.WriteLine(a.StructuralCompare(b)); // 1

}


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 1512 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信