C# 计算列表中的出现次数

标签 c# list lambda count

我有一个 Card 类型,带有一个名为 Valueint 属性,其中 Ace = 14、Five = 5 等。

如果我有一张卡片列表 (5),即。一只手。我想做的是计算 Value 等于另一张卡的卡数,即找到 4 个同类、3 个同类、一对、两对等。我对 C#/编程相当陌生,但我相信这是 LINQ/Lambda 表达式的情况?有人可以帮我吗?

class Card : IComparable<Card>
{
    private string name;
    private int value;
    private string suit;
    public int Value 
    { 
        get
        {
            return value;
        } 
    }
    <.....> 
    //Constructor accepts string ex. "AH" and builds value 14, suit "Hearts" 
    public int CompareTo(Card that)
    {
        if (this.value > that.value) return -1;
        if (this.value == that.value) return 0;
        return 1;
    }
}
List<Card> HandBuilder = new List<Card>();
HandBuilder.Add(...); //5 Cards
HandBuilder.Count ??   //Help

最佳答案

使用GroupBy非常简单。

var cards = HandBuilder.GroupBy(card => card.Value)
    .OrderByDescending(group => group.Count());

要检查是否有四个同类,只需查看第一组是否有四个项目即可;检查是否有相同的三个,看看第一组是否有三个项目。要检查是否有两对,只需查看前两组是否各有两个项目即可。

关于C# 计算列表中的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525900/

相关文章:

c# - 不能在表达式树的 lambda 中使用动态委托(delegate)参数

c# - 如何验证存储在 C# 类中的数据

c# - 如何使用 C# 获取计算机的工作组名称?

c# - ASP.Net 核心 2.0 : Creating UrlHelper without request

Python 使用索引和/或值替换值

c++ - const std::unordered_map<char, int>' as ‘this’ 参数丢弃 lambda 中的限定符

c# - 为什么条件运算符不能正确地允许使用 "null"来分配给可为 null 的类型?

r - 如何拆分值的数据帧并在 block 上使用 rle?

python - 在 Python 中更新可变变量时自动执行操作

java - 如何从方法引用创建比较器?