第1部分。我有一個名爲Cards的對象。它具有名稱,套裝和價值屬性(傑克,鑽石,2)。我想計算一個玩家是否擁有四個類別(4張牌具有相同的Name屬性)。這如何實現?我正在尋找一種高效的算法。如何按屬性值計算對象?
第2部分。我需要一個算法來找到同一套服裝(即7,8,9,10,心中的傑克)連續5張卡片。非常感謝你們所有的聰明人!
爲了澄清,每個玩家總共處理了8張牌。玩家(物體)有一個名爲Hand的屬性,它是卡片[物體]列表。
第1部分。我有一個名爲Cards的對象。它具有名稱,套裝和價值屬性(傑克,鑽石,2)。我想計算一個玩家是否擁有四個類別(4張牌具有相同的Name屬性)。這如何實現?我正在尋找一種高效的算法。如何按屬性值計算對象?
第2部分。我需要一個算法來找到同一套服裝(即7,8,9,10,心中的傑克)連續5張卡片。非常感謝你們所有的聰明人!
爲了澄清,每個玩家總共處理了8張牌。玩家(物體)有一個名爲Hand的屬性,它是卡片[物體]列表。
對於部分1,你可以這樣做:
var has4ofaKind = cards.GroupBy(c => c.Name).Any(g => g.Count() >= 4);
對於第2部分,它將如果你有一個屬性是輕鬆了很多,說Value
,爲整數,而不是字符串。然後,你可以這樣做:
var firstSuit = cards.First.Suit();
var isFlush = cards.Skip(1).All(c => c.Suit == firstSuit);
var isStraight = !cards.OrderBy(c => c.Value)
.Select((c, i) => c.Value - i)
.Distinct().Skip(1).Any();
var isStraightFlush = isFlush && isStraight;
注這是假定一隻手是5張卡片。要查找的8手的5張卡直/平,你不得不使用這樣的事情:
var hasFlush = cards.cards.GroupBy(c => c.Suit).Any(g => g.Count() >= 5);
var hasStraight = !cards.OrderBy(c => c.Value)
.Select((c, i) => c.Value - i)
.GroupBy(x => x)
.Any(g => g.Count() >= 5);
要找到同花順是稍微棘手:
var hasStraightFlush= !cards.OrderBy(c => c.Value)
.Select((c, i) => new { x = c.Value - i, c.Suit })
.GroupBy(x => x)
.Any(g => g.Count() >= 5);
得愛LINQ。很好的答案 –
對於部分1 :你有什麼數據結構給玩家?也就是說,你如何表現玩家的卡片收藏?第二部分:從中找出5張牌? –
你的意思是發現玩家的手牌是否連續有5張牌? – MichelleJS
謝謝。每個玩家總共處理8張牌。 Player對象有一個Hand屬性,它是一個卡片列表。希望我回答你的問題。我也會更新這個問題,以便更清楚。準確地說是 – pnduke