如何使用Contains()
,但數組是比較對象?這裏的區別是我需要檢查數組的內容是否相等,而不是內存地址。我怎樣才能做到這一點?Array.Contains()按值排序
var array = List<byte[]>();
var searchFor = new byte[23]; //has some value in it
array.Contains(searchFor); //Doesn't work properly
如何使用Contains()
,但數組是比較對象?這裏的區別是我需要檢查數組的內容是否相等,而不是內存地址。我怎樣才能做到這一點?Array.Contains()按值排序
var array = List<byte[]>();
var searchFor = new byte[23]; //has some value in it
array.Contains(searchFor); //Doesn't work properly
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));
是的,謝謝!非常好。我喜歡簡化編輯,哈哈 –
要添加到選定的答案,這也是可能的
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;
您需要使用自定義相等比較。 'Contains()'有一個重載。 – svick
我會和@svick說的一樣,如果你的項目應該以相同的順序出現在兩個數組中,Jeroen的答案將會如此...(我仍然可能會覆蓋相等比較器,儘管...... ) – Noctis