对于.Net 4中的每个匹配哈希码,是否存在返回IEnumerable<object>
或IEnumerable<T>
的事情?也就是说,我想要一些只使用GetHashCode()
而忽略等于运算符的东西。
在所有这些评论之后,我以为我在错误的树上咆哮了一会儿。但我找到了这些家伙。虽然这是一个.net 2实现......但至少有一些人认为使用哈希键进行1:n映射是一个好主意。请参阅http://recursionsw.com/Products/csharp.html
下的HashMap说明答案 0 :(得分:1)
您可以使用ToLookup<>
。但我不确定这是你真正想要的。一个例子
public class MyClass
{
public int Num = (new Random()).Next(100);
}
var manyA = new List<MyClass>();
var groupedByHash = manyA.ToLookup(p => p.GetHashCode());
现在,groupsByHash中的每个组都将包含共享相同哈希码的所有元素。你可以认为它们与你的标准“相等”。
答案 1 :(得分:0)
如果我理解你的问题,这可能就是你想要的:
var myEnumerator =
from mo in myObjects where mo.GetHashCode() == SOME_HASH_TO_MATCH select mo;
这将为您提供枚举具有特定哈希码的所有对象(myObjects
)的方法。
更新
根据您的评论,也许是这样的?
Dictionary<int, List<object>> myDataStructure;
void AddItem(object item)
{
int hashCode = item.GetHashCode();
if (!myDataStructure.ContainsKey(hashCode)
{
myDataStructure.Add(new List<object>());
}
myDataStructure[hashCode].Add(item);
}
List<object> GetItems(int hashCode)
{
if (!myDataStructure.Contains(hashCode))
{
return null;
}
return myDataStructure[hashCode];
}
当然,您可以将访问方法和myDataStructure包装在一个类中,或者为访问方法创建extension methods。