因此,我使用一組枚舉來確定4個插槽的值。有一個叫做無,然後有4個叫火,土,水,空氣。插槽的值保存在一個整數字典中,作爲索引,枚舉值作爲值。我想檢查這本詞典的值,看看是否存在某些組合。我不確定如何在沒有硬編碼的情況下最有效地做到這一點。我知道如何存儲組合,但我不確定如何去有效地檢查這些值。檢查組合值
這個想法是,如果組合是火災,火災,火災,火災,那麼它會啓動某個事件/功能。
因此,我使用一組枚舉來確定4個插槽的值。有一個叫做無,然後有4個叫火,土,水,空氣。插槽的值保存在一個整數字典中,作爲索引,枚舉值作爲值。我想檢查這本詞典的值,看看是否存在某些組合。我不確定如何在沒有硬編碼的情況下最有效地做到這一點。我知道如何存儲組合,但我不確定如何去有效地檢查這些值。檢查組合值
這個想法是,如果組合是火災,火災,火災,火災,那麼它會啓動某個事件/功能。
我對字典有點困惑,因爲它聽起來像你只是用鍵來表示序列。我猜這是一個SortedDictionary<int, Elements>
(雖然它可能並不重要)。但首先:
要比較任何兩個列表,您可以使用SequenceEquals
。
比方說,這是你的枚舉:
enum Elements { None, Fire, Earth, Water, Air }
比方說,你正在檢查的組合是:
var elementsToMatch = new Elements[] { Elements.Fire, Elements.Fire, Elements.Fire };
你可以這樣做:
var matches = dictionary.Values.SequenceEquals(elementsToMatch);
這是真的如果兩個集合包含相同序列中的相同元素,則爲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]
。
如果Dictionary的唯一原因是爲每個元素提供一個位置,那麼你可以使用一個數組或一個列表,因爲每個元素都可以被它的位置引用。
謝謝。這幫助了我很多,是的,我像你說的那樣從字典中轉換過來。當時我腦子裏有一個想法,但我沒有評論它爲什麼我使用了一本字典,所以除非我找到一個不使用數組/列表的理由,否則不好使用它們,不要再使用它 –