C# 当比较具有相同项但处于随机位置的数组时,如何返回true?
比较两个数组。 如果第一个数组的项与第二个数组的项相同,则返回true,即使它们位于不同的位置。 以下是两种可能的阵列:C# 当比较具有相同项但处于随机位置的数组时,如何返回true?,c#,arrays,compare,C#,Arrays,Compare,比较两个数组。 如果第一个数组的项与第二个数组的项相同,则返回true,即使它们位于不同的位置。 以下是两种可能的阵列: int[] arrayA = { 1, 2, 3 }; int[] arrayB = { 3, 2, 1 }; 我只能找到arrayB在arrayA中是否有一个数字。解决这个问题的一个方法是从每个数组创建一个哈希集,然后使用.SetEquals(HashSet HashSet)检查它们是否有相同的值 public static bool CompareArrays(int[
int[] arrayA = { 1, 2, 3 };
int[] arrayB = { 3, 2, 1 };
我只能找到arrayB在arrayA中是否有一个数字。解决这个问题的一个方法是从每个数组创建一个
哈希集
,然后使用.SetEquals(HashSet 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);
}
公共静态布尔比较数组(int[]array1,int[]array2)
{
//使用Linq创建集合
HashSet set1=array1.ToHashSet();
HashSet set2=array2.ToHashSet();
//将集合与.SetEquals()进行比较
返回set1.SetEquals(set2);
}
解决此问题的一种方法是从每个数组创建一个哈希集
,然后使用.SetEquals(HashSet 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);
}
公共静态布尔比较数组(int[]array1,int[]array2)
{
//使用Linq创建集合
HashSet set1=array1.ToHashSet();
HashSet set2=array2.ToHashSet();
//将集合与.SetEquals()进行比较
返回set1.SetEquals(set2);
}
您可以使用该方法(LINQ)
您可以使用该方法(LINQ)
可能重复的可能重复的可能重复的可能重复的可能重复的
set2
不需要是HashSet
--HashSet。SetEquals
接受IEnumerable
set2
不需要是HashSet
接受IEnumerable
。这比arrayA.ToHashSet().SetEquals(arrayB)
@canton7更昂贵,但仍然更可取,因为它可以产生正确的结果。相反,set1.SetEquals(set2)
将错误地报告数组{1,2,1}和{1,2,2}相等,因为它忽略了重复的元素。非常正确。有一些解决方法可以使用字典,也不要求您的项目具有可比性。@canton7同意。@canton7您可能希望使用字典提供性能和正确的实现。我已经给出了一个答案,我认为提供第二个答案是不正确的。这比arrayA.ToHashSet().SetEquals(arrayB)
@canton7更昂贵,但仍然更可取,因为它可以产生正确的结果。相反,set1.SetEquals(set2)
将错误地报告数组{1,2,1}和{1,2,2}相等,因为它忽略了重复的元素。非常正确。有一些解决方法可以使用字典,也不要求您的项目具有可比性。@canton7同意。@canton7您可能希望使用字典提供性能和正确的实现。我已经给出了一个答案,我认为第二个答案是不对的。