我有一個List<Tuple<string,long,byte[]>>
,我想按字節數組的內容分組。按數組內容分組
有沒有簡單的方法來做到這一點與GroupBy
和lambda?
理想情況下,我想在不創建中間數據結構(如保存數組元素的字符串)的情況下執行此操作。
我有一個List<Tuple<string,long,byte[]>>
,我想按字節數組的內容分組。按數組內容分組
有沒有簡單的方法來做到這一點與GroupBy
和lambda?
理想情況下,我想在不創建中間數據結構(如保存數組元素的字符串)的情況下執行此操作。
你可以做到這一點使用自定義IEqualityComparer<byte[]>
(甚至更好,一般一個:IEqualityComparer<T[]>
)執行:
class ArrayComparer<T> : IEqualityComparer<T[]>
{
public bool Equals(T[] x, T[] y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(T[] obj)
{
return obj.Aggregate(string.Empty, (s, i) => s + i.GetHashCode(), s => s.GetHashCode());
}
}
我敢肯定GetHashCode
可以實現更好的,但它只是一個例子!
用法:
var grouped = source.GroupBy(i => i.Item3, new ArrayComparer<byte>())
這不是一個非常有效的哈希碼生成方法,但它會工作。 – Servy 2013-04-05 18:48:08
正如我所說 - 這只是一個例子。 – MarcinJuraszek 2013-04-05 18:48:44
好吧,OP不會知道你的GetHashCode方法不是很好,或者如何解決它;他只會測試一次或兩次,看到正確的輸出,並且再也不會碰它。 – Servy 2013-04-05 18:49:20
什麼是你希望直到結束?如果您將單個字節項目作爲關鍵字,那麼結果的其餘部分是什麼? – itsme86 2013-04-05 18:41:41
我希望結束與列表中的項目按照該數組的內容分組。即如果數組相等,則它們在同一組中,否則它們處於不同的組中。 – soandos 2013-04-05 18:42:36
您是否將數組的定義定義爲對同一個數組的引用,或者在不同數組中具有相同的字節?如果是後者,則需要爲'byte []'定義一個自定義的相等比較器。 – Servy 2013-04-05 18:43:26