2017-05-24 12 views
0

したがって、4つのスロットの値を決定するために列挙型のグループを使用しています。無しと呼ばれ、火、土、水、空気と呼ばれるものがあります。スロットの値は、インデックスとして整数の辞書に保持され、値として列挙されます。私はこの辞書の値をチェックして、特定の組み合わせが存在するかどうかを確認したい。すべての状況をハードコーディングせずにこれを最も効果的に実行する方法についてはわかりません。私はどのように組み合わせを保存することができたのか知っていますが、私はその値に対して効果的にチェックする方法を確かめていません。組み合わせの値のセットを確認する

コンビネーションが火災、火災、火災、火災の場合は、特定のイベント/機能を設定します。

答えて

0

私はちょうどシーケンスを示すためにキーを使用しているように聞こえるので、少し混乱しています。しかし、最初は:

SequenceEqualsの2つのリストを比較するには、これは、SortedDictionary<int, Elements>であると推測しています。

さんが言ってみましょうこれはあなたの列挙です:

var elementsToMatch = new Elements[] { Elements.Fire, Elements.Fire, Elements.Fire }; 

あなたはこれを行うことができます:

var matches = dictionary.Values.SequenceEquals(elementsToMatch); 

それは本当だ

enum Elements { None, Fire, Earth, Water, Air } 

はのは、あなたがチェックしている組み合わせであるとしましょう両方のセットに同じシーケンスの同じ要素が含まれている場合はfalse、そうでない場合はfalse

シーケンスは、単なる要素の組み合わせが重要でない場合は、あなたが最初にそれらを並べ替えることができは:

var matches = dictionary.Values.OrderBy(v=>v) 
    .SequenceEquals(elementsToMatch.OrderBy(e=>e)); 

これを行うために必要なDictionaryですか?

var elements = new Dictionary<int, Elements>(); // or SortedDictionary 
elements.Add(0, Elements.None); 
elements.Add(1, Elements.Fire); 
// etc. 

をそれとも、これを行うことができます:

あなたはこれを行うことができます

var elements = new Elements[] { Elements.None, Elements.Water }; 

するか、List<Elements>を使用しています。それはキーが失われる可能性があります辞書で

elements[0] 
elements[1] 
// etc 

:いずれの場合で

あなたはそれがまったく同じになりますアクセスする方法

elements[0]elements[2]がありますが、 elements[1]はありません。

辞書の唯一の理由は、各要素の位置を提供することである場合は、配列またはリストを使用することができます。

+0

ありがとうございます。これは私が多くの助けと、あなたが言ったように私は辞書から切り替えました。私の考えではアイデアがあったのですが、なぜ辞書を使ったのかはコメントしていませんでした。なぜなら配列/リストを使わない理由が見つからないと、 –

関連する問題