带你读《现代TypeScript高级教程》十八、TS实战之扑克牌排序(1)

简介: 带你读《现代TypeScript高级教程》十八、TS实战之扑克牌排序(1)

十八、TS实战之扑克牌排序

1. 类型和转换

在线运行

 

我们用ts实现扑克牌排序问题,首先,我们将定义所需的数据类型,然后专注于模式查找算法,该算法有几个有趣的要点。

1.类型和转换

定义一些我们需要的类型。RankSuit是明显的联合类型

 

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()函数处理从RankSuit值到数字的转换。

 

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;

 

image.png

 

这些类型用于内部工作;我们还必须定义手牌检测算法的结果类型。我们需要一个枚举类型来表示手牌的可能值。这些值按照从最低("高牌")到最高("皇家同花顺")的顺序排列。

 

enum Hand {
 HighCard, // 高牌 
 OnePair, //  一对
 TwoPairs, // 两对
 ThreeOfAKind, // 三条
 Straight, // 顺子
 Flush, // 同花
 FullHouse, //  葫芦
 FourOfAKind, // 四条
 StraightFlush, //  同花顺
 RoyalFlush //皇家同花顺}


带你读《现代TypeScript高级教程》十八、TS实战之扑克牌排序(2)https://developer.aliyun.com/article/1348421?groupCode=tech_library

相关文章
|
27天前
|
JavaScript Java API
30.【TypeScript 教程】Reflect Metadata
30.【TypeScript 教程】Reflect Metadata
15 4
|
27天前
|
JavaScript 编译器
31.【TypeScript 教程】混入(Mixins)
31.【TypeScript 教程】混入(Mixins)
18 3
|
27天前
|
JavaScript
28.【TypeScript 教程】生成器(Generator)
28.【TypeScript 教程】生成器(Generator)
25 3
|
27天前
|
JavaScript 前端开发
27.【TypeScript 教程】迭代器(Iterator)
27.【TypeScript 教程】迭代器(Iterator)
21 3
|
27天前
|
JavaScript 编译器
35.【TypeScript 教程】编译选项
35.【TypeScript 教程】编译选项
16 2
|
27天前
|
JavaScript 编译器
33.【TypeScript 教程】命名空间
33.【TypeScript 教程】命名空间
18 2
|
27天前
|
JavaScript 存储
25.【TypeScript 教程】infer 关键字
25.【TypeScript 教程】infer 关键字
18 2
|
27天前
|
JavaScript
23.【TypeScript 教程】条件类型
23.【TypeScript 教程】条件类型
12 2
|
27天前
|
JavaScript 开发者
22.【TypeScript 教程】映射类型
22.【TypeScript 教程】映射类型
15 2
|
27天前
|
索引 JavaScript 前端开发
21.【TypeScript 教程】索引类型
21.【TypeScript 教程】索引类型
18 2