2017-05-24 8 views
0

Also verwende ich eine Gruppe von enums, um den Wert von 4 Slots zu bestimmen. Es gibt eine, die keine heißt, und dann 4 heißt Feuer, Erde, Wasser, Luft. Die Werte der Slots werden in einem Dictionary einer Ganzzahl als Index und der Enumeration als Wert gehalten. Ich möchte die Werte dieses Wörterbuchs überprüfen, um zu sehen, ob bestimmte Kombinationen vorhanden sind. Ich bin mir nicht sicher, wie ich das am effektivsten tun soll, ohne jede Situation hart zu codieren. Ich weiß, wie ich die Kombinationen speichern könnte, aber ich bin nicht genau sicher, wie man das gegen die Werte effektiv überprüfen kann.Überprüfung der Werte für die Kombination

Die Idee ist, wenn die Kombination Feuer, Feuer, Feuer, Feuer, dann setzt es ein bestimmtes Ereignis/Funktion aus.

Antwort

0

Ich bin ein wenig verwirrt über die Wörterbuch, weil es so klingt, sind Sie nur die Tasten mit der Sequenz anzuzeigen. Ich schätze, das ist ein SortedDictionary<int, Elements> (obwohl es nicht wichtig ist.) Aber zuerst:

Um zwei Listen zu vergleichen, können Sie SequenceEquals verwenden.

Lassen Sie uns sagen, dass dies Ihre Enum:

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

ist die Kombination für Sie überprüfen Lassen Sie sagen, ist:

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

Es ist wahr:

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

Sie dies tun könnte wenn beide Sätze die gleichen Elemente in der gleichen Reihenfolge enthalten, andernfalls falsch.

Wenn die Sequenz nicht wichtig, nur die Kombination von Elementen, dann könnte man sich zuerst sortieren:

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

Ist ein Dictionary notwendig, dies zu tun?

Sie können dies tun:

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

Oder Sie könnten dies tun:

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

Oder eine List<Elements> verwenden.

Auf jeden Fall so, wie Sie es zugreifen genau das gleiche sein wird:

elements[0] 
elements[1] 
// etc 

Mit einem Wörterbuch möglich ist es, dass ein Schlüssel fehlen könnte. Es könnte eine elements[0] und elements[2], aber keine elements[1] sein.

Wenn der einzige Grund für das Wörterbuch ist eine Position für jedes Element zu schaffen, dann, weil Sie könnte ein Array oder eine Liste verwenden, wobei jedes Element bereits durch seine Position verwiesen werden kann.

+0

Vielen Dank. Das hat mir sehr geholfen, und ja, ich bin vom Wörterbuch gewechselt, wie du gesagt hast. Zu der Zeit hatte ich eine Idee in meinen Gedanken, aber ich habe es nicht kommentiert, warum ich ein Wörterbuch benutzt habe. Wenn ich also keinen Grund finde, stattdessen Array/Liste zu verwenden, benutze sie nicht, ich benutze sie wieder –

Verwandte Themen