-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] = 2番目(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をオーバーライドする必要がないのは良いことです。タプルが内部でそれを行うからです。Equalsgethashcode

参照:

于 2012-04-23T06:54:35.427 に答える
0

.NETのすべてのコレクションのリストは次のとおりです。http:
//msdn.microsoft.com/en-us/library/system.collections.generic.aspxご覧
のとおり、そのようなコレクションは見つかりません。

また、そのようなパラダイムを説明する一般的なコンピュータサイエンスの文献には、標準的なデータ構造がないことも確信しています。

Arionの実装は必要なものを提供しますが、キー/値を検索するときのパフォーマンスに欠け、キーまたは値の単一性を提供せず、ペアのみを提供します。

できることは、一方の値がもう一方のキーを参照する2つのディクショナリを使用してデータ構造を実装することです。

于 2012-04-23T07:01:30.613 に答える