C# 半字典

C# 半字典,c#,.net-4.0,C#,.net 4.0,对于.NET4中的每个匹配哈希代码,是否有这样一种东西返回IEnumerable或IEnumerable?也就是说,我想要一些只使用GetHashCode()并忽略相等运算符的内容 听了这么多评论之后,我还以为我找错了方向呢。但我找到了这些家伙。假设它是一个.NET2实现。。。但至少有一些人认为使用散列键进行1:n映射是个好主意。请参见下的HashMap说明。您可以使用ToLookup。但我不确定这是你真正想要的。一个例子 public class MyClass { public i

对于.NET4中的每个匹配哈希代码,是否有这样一种东西返回
IEnumerable
IEnumerable
?也就是说,我想要一些只使用
GetHashCode()
并忽略相等运算符的内容



听了这么多评论之后,我还以为我找错了方向呢。但我找到了这些家伙。假设它是一个.NET2实现。。。但至少有一些人认为使用散列键进行1:n映射是个好主意。请参见

下的HashMap说明。您可以使用
ToLookup
。但我不确定这是你真正想要的。一个例子

public class MyClass
{
    public int Num = (new Random()).Next(100);
}

var manyA = new List<MyClass>();

var groupedByHash = manyA.ToLookup(p => p.GetHashCode());
公共类MyClass
{
public int Num=(new Random()).Next(100);
}
var manyA=新列表();
var groupedByHash=manyA.ToLookup(p=>p.GetHashCode());

现在groupedByHash中的每个组都将包含共享相同哈希代码的所有元素。你可以认为他们是“平等”的标准。

< P>如果我正确地理解你的问题,这可能是你要寻找的:

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;
无效附加项(对象项)
{
int hashCode=item.GetHashCode();
if(!myDataStructure.ContainsKey(hashCode)
{
添加(新列表());
}
myDataStructure[hashCode]。添加(项);
}
列表GetItems(int hashCode)
{
如果(!myDataStructure.Contains(hashCode))
{
返回null;
}
返回myDataStructure[hashCode];
}

当然,您可以将access方法和myDataStructure封装在一个类中,或者为access方法创建一个类。

一般来说,添加到BCL中的类都是有用的。我不知道这怎么可能有用。您能解释一下为什么要用这个奇怪的东西,以及为什么要用它吗?(也就是说:制作一个字典,并传入一个比较哈希代码的自定义相等提供程序,完成。)@Eric Lippert:非常感谢您的回复。好的……我会这样做+我很高兴采用这种方法。我不知道您可以使用自定义等式比较器字典。很好。理由:这是一种基于小数据簇的特例,它自然地聚集在一个非常大的集合中。它也可以基于带有通过from/to.LINQ的条目范围通常会枚举整个列表。不过哈希非常快。希望它在内存中。@Eric Lippert:DictionaryOfLists:DictionaryOfLists也会这样做。为什么我会自动想到一种先使用哈希映射的方法呢?哦,好吧。或者DictionaryOfLists:DictionaryOfLists取决于其他覆盖必需。您很有可能在此处误用/滥用哈希代码。更需要快速的是该查询的实现。简而言之,字典根据哈希代码将内容放入存储桶中以加快速度。我希望根据通过哈希代码实现的某个分组将内容过滤回存储桶。@sgtz:更新了我的re根据您的评论进行响应。这专门说明了可以对对象执行的操作超出了我的需要。最好将其推入容器中。@sgtz不,我使用的是容器的扩展。您在container.ref上执行
ToLookup
。这是功能性的,但看不到这将实际使用哈希更快。是吗?