十八、TS实战之扑克牌排序
1. 类型和转换
在线运行
我们用ts实现扑克牌排序问题,首先,我们将定义所需的数据类型,然后专注于模式查找算法,该算法有几个有趣的要点。
1.类型和转换
定义一些我们需要的类型。Rank和Suit是明显的联合类型。
type Rank = | 'A' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | 'J' | 'Q' | 'K' type Suit = '♥' | '♦' | '♠' | '♣';
我们将使用Card对象进行处理,将rank和suit转换为数字。卡片将用从1(Ace)到13(King)的值表示,花色从1(红心)到4(梅花)。rankToNumber()和suitToNumber()函数处理从Rank和Suit值到数字的转换。
type Card = { rank: number; suit: number }; const rankToNumber = (rank: Rank): number => rank === 'A' ? 1 : rank === 'J' ? 11 : rank === 'Q' ? 12 : rank === 'K' ? 13 : Number(rank); const suitToNumber = (suit: Suit): number => suit === '♥' ? 1 : suit === '♦' ? 2 : suit === '♠' ? 3 : /* suit === "♣" */ 4;
这些类型用于内部工作;我们还必须定义手牌检测算法的结果类型。我们需要一个枚举类型来表示手牌的可能值。这些值按照从最低("高牌")到最高("皇家同花顺")的顺序排列。
enum Hand { HighCard, // 高牌 OnePair, // 一对 TwoPairs, // 两对 ThreeOfAKind, // 三条 Straight, // 顺子 Flush, // 同花 FullHouse, // 葫芦 FourOfAKind, // 四条 StraightFlush, // 同花顺 RoyalFlush //皇家同花顺}
带你读《现代TypeScript高级教程》十八、TS实战之扑克牌排序(2)https://developer.aliyun.com/article/1348421?groupCode=tech_library