首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ruby中创建列表的更有效方法

在Ruby中创建列表的更有效方法
EN

Stack Overflow用户
提问于 2013-12-17 01:03:39
回答 5查看 88关注 0票数 3

只是在一副牌里和2-9一起工作。

在Ruby中创建平台的首选和/或最有效的方法是什么?

它是我下面的东西,还是我还能/应该怎么做呢?

代码语言:javascript
复制
deck = []
suits = ["spades", "diamonds", "clubs", "hearts"]

for x in suits
  for y in 2..9
    w = y.to_s
    deck.push(w+" of "+x)
  end
end
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-12-17 01:10:50

代码语言:javascript
复制
suits = ["spades", "diamonds", "clubs", "hearts"]
deck = suits.product((2..9).to_a).map { |x,y| "#{y} of #{x}" }

如果你想要所有52张卡:

代码语言:javascript
复制
suits = ["spades", "diamonds", "clubs", "hearts"]
faces = { 1 => 'Ace', 11 => 'Jack', 12 => 'Queen', 13 => 'King' }
deck = suits.product((1..13).to_a).map { |x,y| "#{faces[y]||y} of #{x}" }
# => Ace of spades, 2 of spades, ..., King of spades, Ace of diamonds, etc.
票数 2
EN

Stack Overflow用户

发布于 2013-12-17 01:25:14

我喜欢product w/ a街区

代码语言:javascript
复制
a, suits = [], ["spades", "diamonds", "clubs", "hearts"]
suits.product((2..9).to_a) {|t,n| a << "#{n} of #{t}"}
票数 4
EN

Stack Overflow用户

发布于 2013-12-17 01:10:14

嗯,你可以用地图:

代码语言:javascript
复制
suits = ["spades", "diamonds", "clubs", "hearts"]
deck = suits.map { |d| (2..9).map { |x| "#{x} of #{d}" } }.flatten

但效率基本相同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20624038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档