2013-10-25 89 views
1

如何使用Contains(),但數組是比較對象?這裏的區別是我需要檢查數組的內容是否相等,而不是內存地址。我怎樣才能做到這一點?Array.Contains()按值排序

var array = List<byte[]>(); 
var searchFor = new byte[23]; //has some value in it 
array.Contains(searchFor); //Doesn't work properly 
+1

您需要使用自定義相等比較。 'Contains()'有一個重載。 – svick

+0

我會和@svick說的一樣,如果你的項目應該以相同的順序出現在兩個數組中,Jeroen的答案將會如此...(我仍然可能會覆蓋相等比較器,儘管...... ) – Noctis

回答

3
bool containsArray = array.Any(a => a.SequenceEqual(searchFor)); 

如果順序不平等關係:

var orderedSearchFor = searchFor.OrderBy(x => x); 
bool containsArray = 
     array.Any(a => a.OrderBy(x => x).SequenceEqual(orderedSearchFor)); 
+1

是的,謝謝!非常好。我喜歡簡化編輯,哈哈 –

0

要添加到選定的答案,這也是可能的

  bool found = (from c in array 
         where c.SequenceEqual(searchFor) 
         select c).Count() > 0; 

根據,如果你想使用像LINQ風格的查詢。

這裏是一個工作示例:

 var array = new List<byte[]>(); 

     var searchFor = new byte[] { 0xAA, 0xA0 }; 

     array.Add(searchFor); 

     bool found = (from c in array 
         where c.SequenceEqual(searchFor) 
         select c).Count() > 0;