具有作为键和值的条目的集合?

时间:2012-04-23 06:51:03

标签: c# collections dictionary tuples lookup

我正在寻找一种可以存储和查找多个元组的解决方案。 Dictionary仅提供查找键的简单方法,但不提供值。我理解为什么(价值的非唯一性可能性)。但是,如果每个条目(键和值)都是严格唯一的。是否有一个集合可以轻松地存储和查找我选择的任何键并返回此键的匹配字段?查找值时,我必须指定键字段和所需的查找字段。我的目标是C#4.0

示例:

Collection<string, int, myEnum> myCollection = new ...

myCollection.Add("abc", 5, myEnum.First);
myCollection.Add("def", 6, myEnum.Second);

myCollection [int,myEnum,6] = Second(类型为myEnum) - &gt;我只是编写了如何指定键和值字段的方法。这样的集合是否存在或者我需要自己编辑?

我理解我正在深入研究表的概念,但是如果可能的话,我希望避免使用表结构。

注意:元组的数量将被限制为<20(因此,如果我自己编辑,我不会过分关注必须循环但我寻找更优雅的东西)

由于

2 个答案:

答案 0 :(得分:2)

您只需hashset tuple。像这样:

var hs=new HashSet<Tuple<string,int,myEnum>>();

然后添加你这样做(add函数是O(1)):

hs.Add(new Tuple<string,int,myEnum>("abc", 5, myEnum.First));
hs.Add(new Tuple<string,int,myEnum>("def", 6, myEnum.Second));

查找你执行此操作的元组(contains函数为O(1)):

var tupleTolookUp=new Tuple<string,int,myEnum>("abc", 5, myEnum.First);
if(hs.Contains(tupleTolookUp))
{
    //do what ever with the tupleTolookUp
}

hashset中,Tuples必须是唯一的。但好处是您不必覆盖Equalsgethashcode。因为元组是内部的。

参考文献:

答案 1 :(得分:0)

以下是.NET中所有集合的列表:
http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx
如您所见,没有找到这样的集合。

我也很确定在常见的计算机科学文献中没有标准的数据结构来描述这样的范例。

Arion的实现将提供您所需要的功能,但在搜索键/值时缺乏性能,并且不提供单一的键或值,而只提供成对的。

你能做的是用两个词典实现你的数据结构,其中一个值引用另一个词的键。