Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#对扑克牌进行分类_C#_Sorting_Playing Cards - Fatal编程技术网

c#对扑克牌进行分类

c#对扑克牌进行分类,c#,sorting,playing-cards,C#,Sorting,Playing Cards,我有一张具有以下属性的课堂卡片 public int value { get; private set; } public string suit { get; private set; } 一旦我有一个手牌球员 List<Card> hand 手动列表 我如何对那只手进行分类,以便 1) 主要分为套牌,最大(最多牌)组排在第一位,最小(最少牌)组排在最后,以及 2) 将这些组从高到低进行排序 同样,这是为Rook设计的——几乎和扑克牌一样。数值范围为1-14,有四套西装-红色

我有一张具有以下属性的课堂卡片

public int value { get; private set; }
public string suit { get; private set; }
一旦我有一个手牌球员

List<Card> hand
手动列表
我如何对那只手进行分类,以便

1) 主要分为套牌,最大(最多牌)组排在第一位,最小(最少牌)组排在最后,以及

2) 将这些组从高到低进行排序


同样,这是为Rook设计的——几乎和扑克牌一样。数值范围为1-14,有四套西装-红色、绿色、黄色和黑色。此外,还有一张“车”牌。请注意,以防发生任何变化。

Linq对于排序非常有用:

var sorted = hand
    .GroupBy(x => x.suit)
    .Select(x => new 
    {
        Cards = x.OrderByDescending(c => c.value),
        Count = x.Count(),
    })
    .OrderByDescending(x => x.Count)
    .SelectMany(x => x.Cards);
如果你想变得更时尚,你可以用
排序器将
套装
做成自己的款式。这将让你完全控制像有特殊套装的卡片之类的东西

class Suit
{
    public string Name { get; set; }
    public int SortOrder { get; set; }
}
或者,作为枚举:

enum Suit
{
    Hearts = 1, //1 = sort order
    Clubs = 2, 
    //...
    Rook = 5,
}

Linq对于排序非常有用:

var sorted = hand
    .GroupBy(x => x.suit)
    .Select(x => new 
    {
        Cards = x.OrderByDescending(c => c.value),
        Count = x.Count(),
    })
    .OrderByDescending(x => x.Count)
    .SelectMany(x => x.Cards);
如果你想变得更时尚,你可以用
排序器将
套装
做成自己的款式。这将让你完全控制像有特殊套装的卡片之类的东西

class Suit
{
    public string Name { get; set; }
    public int SortOrder { get; set; }
}
或者,作为枚举:

enum Suit
{
    Hearts = 1, //1 = sort order
    Clubs = 2, 
    //...
    Rook = 5,
}

创建4个链接列表(每件衣服一个),将每张卡片插入链接列表中的相关位置(从高到低),并为每个列表保留一个计数器。根据计数器,您将知道每件衣服有多少张卡片,并且它们将被分类。只需将它们复制到完成的阵列中。

创建4个链接列表(每件西装一个),将每张卡片插入链接列表中的相关位置(从高到低),并为每个列表保留一个计数器。根据计数器,您将知道每件衣服有多少张卡片,并且它们将被分类。只需将它们复制到完成的阵列。

它应该按照卡片数量最多的套装进行排序。或者,您可以将
套装
制作成
枚举
。几乎成功了!这就是输出:废话。。。在编辑过程中,我按enter键5的黑色6的黑色8的绿色9的绿色6的红色7的红色8的红色13的红色0的车2的黄色14的黄色套装应该是一个枚举,你不想按套装顺序排序,而是按套装的卡片数排序。可能是你的工作GroupBy@DaveZych我正在相应地更新我的答案。它应该按照卡片数量最多的套装进行排序。或者,你可以制作
套装
一个
枚举
。几乎成功了!这就是输出:废话。。。在编辑过程中,我按enter键5的黑色6的黑色8的绿色9的绿色6的红色7的红色8的红色13的红色0的车2的黄色14的黄色套装应该是一个枚举,你不想按套装顺序排序,而是按套装的卡片数排序。可能是你的工作GroupBy@DaveZych我正在相应地更新我的答案。谢谢!工作100%完美谢谢!工作100%完美
var sorted = hand
    .GroupBy(l => l.Suit)
    .OrderByDescending(g => g.Count())
    .SelectMany(g => g.OrderByDescending(c => c.Value));