出于学习目的,这叫什么?正在创建的对象是数组还是散列?
stack_of_cards = []
我是这样填的:
stack_of_cards << Card.new("A", "Spades", 1)
stack_of_cards << Card.new("2", "Spades", 2)
stack_of_cards << Card.new("3", "Spades", 3)
...
以下是我的Card类:
class Card
attr_accessor :number, :suit, :value
def initialize(number, suit, value)
@number = number
@suit = suit
@value = value
end
def to_s
"#{@number} of #{@suit}"
end
end
我想对这个数组/散列中的元素进行混洗(这叫什么?:s)
有什么建议吗?
9条答案
按热度按时间bejyjqdl1#
它是一个数组,更多信息请参见http://www.ruby-doc.org/core-1.8.7/classes/Array.html。
我已经编写了functional表单,它返回一个新的数组,并且它是经过改组的新数组。您可以改用:
...将阵列就地洗牌。
kkih6yb82#
如果您想要对散列进行混洗,可以使用如下内容:
我发布了这个答案,因为如果我搜索“ruby shffle hash”,我总是会找到这个问题。
ecfsfe2w3#
除了使用Shuffle方法外,还可以使用Sort方法:
如果您使用的是未实现
shuffle
的旧版本Ruby,这可能会很有用。与shuffle!
一样,您可以使用sort!
在现有阵列上工作。2uluyalo4#
如果您想疯狂地编写您自己的就地Shuffle方法,您可以这样做。
holgip5t5#
对于阵列:
对于哈希:
4c8rllxm6#
老问题,但也许能帮到别人。我用它创造了一个纸牌游戏,@davissp14就是这么写的,它叫“Fisher-Yates算法”
现在,您可以将其用作:
https://dev.to/linuxander/fisher-yates-shuffle-with-ruby-1p7h
p5fdfcr17#
如果要对散列进行置乱,但不希望重载Hash类,则可以使用排序函数,然后使用to_h函数(Ruby 2.1+)将其转换回散列:
7cjasjjr8#
对于阵列:
array.shuffle
对于散列:
hash.sort_by{ rand() }
5m1hhzi49#
另一种散列混洗是..