-1

我正在寻找一种可以让我存储和查找多个元组的解决方案。字典只提供了一种查找键而不是值的简单方法。我理解为什么(值的非唯一性可能性)。但是,如果每个条目(键和值)都是严格唯一的怎么办。是否有一个集合可以轻松地让我存储和查找我选择的任何键并返回该键的匹配字段?在查找值时,我必须指定关键字段和所需的查找字段。我的目标是 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 (of type myEnum) -> 我只是想出了如何指定键和值字段的方式。这样的收藏是否存在,还是我需要自己推出?

我知道我正在进入表格的概念,但如果可能的话,我想避免使用表格结构。

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

谢谢

4

2 回答 2

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是独一无二的。但好处是您不必重写Equalsand gethashcode。因为元组在内部进行。

参考:

于 2012-04-23T06:54:35.427 回答
0

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

我也很确定在描述这种范式的普通计算机科学文献中没有标准的数据结构。

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

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

于 2012-04-23T07:01:30.613 回答