检查组合的值集

时间:2017-05-24 23:14:23

标签: c# unity3d

所以,我正在使用一组枚举来确定4个插槽的值。有一个叫做无,然后有4个叫火,土,水,空气。时隙的值保存在整数字典中作为索引,枚举作为值。我想检查这个字典的值,看看是否存在某些组合。如果不对每种情况进行硬编码,我不确定如何最有效地做到这一点。我知道如何存储组合,但我不确定如何有效地检查这些值。

这个想法是,如果组合是火,火,火,火,那么它会引发某个事件/功能。

1 个答案:

答案 0 :(得分:0)

我对字典感到有些困惑,因为听起来你只是用键来指示序列。我猜这是一个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]

如果Dictionary的唯一原因是为每个元素提供一个位置,那么你可以使用一个数组或一个列表,因为每个元素都可以被它的位置引用。