所以,我正在使用一组枚举来确定 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);
如果两个集合都包含相同序列中的相同元素,则为 true,否则为 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]
。
如果字典的唯一原因是为每个元素提供一个位置,那么您可以使用数组或列表,因为每个元素已经可以通过其位置引用。