在C#中使用LINQ比较数组

Tho*_*eld 21 c# linq

我有两个阵列

string[] a = { "a", "b", "c" };
string[] b = { "a", "b", "c" };
Run Code Online (Sandbox Code Playgroud)

我需要使用LINQ比较两个数组.

仅当两个阵列具有相同大小时才应进行比较.数据可以按任何顺序排列,如果[]的所有值和b []的所有值相同,则仍然返回true.

Kyl*_*ndo 29

string[] a = { "a", "b" };
string[] b = { "a", "b" };

return (a.Length == b.Length && a.Intersect(b).Count() == a.Length);
Run Code Online (Sandbox Code Playgroud)

经过一些性能测试:

  • 超过10,000个小字符串 - 5ms
  • 超过100,000个小字符串 - 99ms
  • 超过1,000,000个小字符串 - 平均 601ms
  • 超过100,000~500个字符串 - 190ms

  • 从句法上讲,我会说`return(a.Length == b.Length && a.Intersect(b).Count()== a.Length)`,但那只是我. (4认同)
  • 但是,如果存在重复元素(在两个数组中),则此方法不会失败.作为set操作的交叉操作可能只保留不同的元素.因此,如果将其与Array.length进行比较,则比较可能会失败. (3认同)

Jer*_*rts 26

不确定性能,但这似乎有效.

string[] a = { "a", "b", "c" };
string[] b = { "a", "b", "c" };

bool result = a.SequenceEqual(b);
Assert.AreEqual(true, result);
Run Code Online (Sandbox Code Playgroud)

但是,它不是与订单无关的,因此它不符合OP的要求.

string[] a = { "a", "b", "c" };
string[] b = { "a", "c", "b" };

bool result = a.SequenceEqual(b);
Assert.AreEqual(false, result);
Run Code Online (Sandbox Code Playgroud)

  • 你是什​​么意思,"它是独立的订单"?SequenceEqual不是顺序独立的.在第二个代码示例中,它将返回false (2认同)

Nik*_*iki 5

我认为这将始终是一个O(n log n)操作,所以我只是对两个数组进行排序并比较它们,例如使用SequenceEqual.