【发布时间】:2019-04-20 12:04:15
【问题描述】:
比较两个数组。 如果第一个数组与第二个数组具有相同的项,则返回 true,即使它们位于不同的位置。 这里有两个可能的数组:
int[] arrayA = { 1, 2, 3 };
int[] arrayB = { 3, 2, 1 };
我只能找到 arrayB 在 arrayA 中是否有一个数字。
【问题讨论】:
比较两个数组。 如果第一个数组与第二个数组具有相同的项,则返回 true,即使它们位于不同的位置。 这里有两个可能的数组:
int[] arrayA = { 1, 2, 3 };
int[] arrayB = { 3, 2, 1 };
我只能找到 arrayB 在 arrayA 中是否有一个数字。
【问题讨论】:
您可以使用SequenceEqual 方法 (LINQ)。
bool areEqual = arrayA.OrderBy(n => n).SequenceEqual(arrayB.OrderBy(n => n));
【讨论】:
arrayA.ToHashSet().SetEquals(arrayB)贵。
set1.SetEquals(set2) 会错误地报告数组 { 1, 2, 1 } 和 { 1, 2, 2 } 相等,因为它忽略了重复元素。
解决此问题的一种方法是从每个数组创建一个HashSet<int>,然后使用.SetEquals(HashSet<int> hashSet) 检查它们是否具有相同的值。
public static bool CompareArrays(int[] array1, int[] array2)
{
// Create sets using Linq
HashSet<int> set1 = array1.ToHashSet();
HashSet<int> set2 = array2.ToHashSet();
// Compare the sets with .SetEquals()
return set1.SetEquals(set2);
}
【讨论】:
set2 不需要是 HashSet -- HashSet<T>.SetEquals 需要 IEnumerable<T>。