我有一个类卡,它包含对具有不同卡类型的枚举的引用。枚举定义如下:
enum Rank
{
Ace = 1,
Two,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Ten,
Jack,
King,
Queen
}
我有一个LINQ查询,它应该采用List并检查它们是否按顺序排列。这意味着任何两个等级之间的差异只有1。
查询:
List<Card> cards = group.ToList();
cards.Sort(SortComparatorByRank);
List<Card> test = cards.Where((x, idx) =>
(idx >= 1 && (int)cards[idx - 1].CardRank == (int)x.CardRank - 1 ||
(idx < cards.Count() - 1 &&
(int)cards[idx + 1].CardRank == (int)x.CardRank + 1))).ToList();
无论如何运行,我得到了这个结果:
正如你所看到的,两个和四个应该互相追随???
此查询的列表不包含所有卡片,这就是我需要检查排名顺序等等...
答案 0 :(得分:5)
不,这并不表示两人和四人应该互相追随。它表明cards
中没有三个。
Two
由于前面有Ace
而过滤了过滤器的第一部分,而Four
因为Five
后面的bool
传递了过滤器的第二部分。
鉴于您正在尝试检查一切是否按顺序排列,听起来您真的想要返回All
的内容 - 我建议var valid = cards.Zip(cards.Skip(1), (first, second) => new { first, second })
.All(pair => pair.first.CardRank == pair.second.CardRank - 1);
。你也只想成对,所以我会考虑像:
{{1}}
答案 1 :(得分:0)
(idx < cards.Count() - 1 &&
(int)cards[idx + 1].CardRank == (int)x.CardRank + 1))).ToList();
他将四人与五人配对。
答案 2 :(得分:0)
在您对Cards.Sort的调用中,您正在执行排序,但未将新列表设置回卡指针。
尝试做一张牌= cards.Sort(在你的代码的第二行)。