除了使用shuffle函数的指定索引之外,有没有办法对数组中的所有元素进行混洗?
无需手动编写方法,Ruby是否支持类似的东西?
例如,假设我有一个整数数组:
array = [1,2,3,4,5]
我希望以任意随机顺序对元素进行洗牌,但将第一个int留在原位.最终结果可能是这样的:
=> [1,4,3,2,5]
只要第一个元素保留在原位.我显然已经通过创建自己的方法来找到解决方法,但是我想看看是否有某种内置函数可以帮助减少时间和空间.
最佳答案 最简洁的答案是不.基于最新的
Ruby documentation of Array.shuffle,它接受的唯一参数是随机数生成器.所以你需要编写自己的方法 – 这是我对它的看法:
module ArrayExtender
def shuffle_except(index)
clone = self.clone
clone.delete_at(index)
clone.shuffle.insert(index, self[index])
end
end
array = %w(a b c d e f)
array.extend(ArrayExtender)
print array.shuffle_except(1) # => ["e", "b", "f", "a", "d", "c"]
print array.shuffle_except(2) # => ["e", "a", "c", "b", "f", "d"]