【发布时间】:2019-07-02 14:15:17
【问题描述】:
我有一个自定义对象Deck,它的属性之间有一个List<Card> cards。每个Card 都有自己的List<string> colors,用一个或多个大写字母表示卡片的颜色,例如[W, U, B, R, G]。
我需要做的是根据colors 列表对cards 列表进行排序,首先我从一种颜色中获取所有卡片,依此类推;对于具有不止一种颜色的卡片,我希望它们根据自定义优先级列表进行排序(例如,如果它是 W 和 U 将其放在 W 卡片之间),但我意识到这更加复杂,所以它不是对我来说真的是必需品。
我试图做的是
deck.cards = deck.cards.OrderBy(x => x.colors).ToList();
但我收到一条错误消息,指出至少有一个对象需要实现 ICompare。
我可以做些什么来对我的套牌列表进行排序?是否可以不仅像描述的那样对它进行排序,而且还可以基于特定的顺序,例如 B 之前 R 之前 G 等等?
【问题讨论】:
-
我不遵循这句话:“(就像如果它是 W 和 U 放在 W 卡之间)。”一些示例输入和输出可能会有所帮助。
-
@canton7 每张卡片可以是一种或多种颜色,颜色用大写字母表示。如果可能的话,在对多色卡片进行排序时,我希望它们根据自定义的“优先级”顺序插入特定颜色的卡片之间,所以如果一张卡片同时是 W 和 U,我希望它在W卡。我意识到这让整个事情变得更加复杂,所以这不是必需品,更像是一个怪癖。
-
你可以创建一个
class实现IComparer<Card>并使用List.Sort方法。 -
我认为您需要更好地指定多色行为。你有“如果它的 W 和 U 把它放在 W only 和 U only 之间”但是如果你有第三种颜色 - 例如你有“B”、“BU”和“BW”。我假设 B 先去然后 BW,但是 BU 去哪里呢?或者它只是像你先用单色按字母顺序排序,然后在它们的末尾用多色卡片排序,如果合适的话,它们按第二种(或第三种等)颜色排序?我发现,通常一旦你清楚明确地解释了你希望你的排序如何工作,代码就很容易从中得到......
-
话虽如此,我认为这可能已经足够复杂,您可能想要创建一个自定义比较器(即
IComparer<Card>)。有一些与此相关的问题可能会给您一个良好的开端(例如 stackoverflow.com/questions/14336416/… )。