簡體   English   中英

在C#中比較2個整數列表/數組的最佳方法是什么?

[英]What is the best way to compare 2 integer lists / array in C#

我想比較2個整數列表是否相等。 如果能讓它變得更容易,我很樂意提前對它們進行排序。 這是我要比較的兩件事的例子。 對於下面,我希望結果是真的。

注意:列表中永遠不會有任何重復項(沒有重復值)

 List<int> list = new List<int>(){1, 4,6,7};
 int[] myArray = new int[]{1, 6,7 ,4};

比較列表時,平等對你意味着什么? 你是否關心列表完全相同....相同的訂單中的相同項目? 或者只是包含相同的值集,無論順序如何。

如果您確實想要驗證列表是否以相同的順序包含相同的值序列,則可以在LINQ中使用SequenceEqual()方法:

bool areEqual = listA.SequenceEqual( listB );

如果列表的順序不同,您可以先對它們進行排序:

bool areEqual = listA.OrderBy(x=>x).SequenceEqual( listB.OrderBy(x=>x) );

如果列表可以包含重復項,並且重復項無關緊要(關於相等性),則可以使用set comparison:

bool setEqual = new HashSet<int>( listA ).SetEquals( listB );

如果重復無關緊要並且您有興趣避免比較的費用(排序,構建哈希集等),您可以先比較兩個集合的大小,並僅比較它們是否相同。

看起來你想將它們作為集合進行比較......在這種情況下:

HashSet<int> hashSet = new HashSet<int>(list);
if (hashSet.SetEquals(myArray))
{
    ...
}

注意,這將使{1,2,2,3}和{1,3,2,3,1}相等。 那是你要的嗎?

幾乎可以肯定的是,內置的東西會做你想要的,但你需要在你的描述中完全准確:)

編輯:正如你所說,沒有重復的元素,這應該沒問題。 然而,記錄這個假設可能是明智之舉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM