ruby - 随机排列有异常(exception)的数组

标签 ruby arrays

有没有一种方法可以使用 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"]

关于ruby - 随机排列有异常(exception)的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27162252/

相关文章:

c - 这是在堆上优化多维数组的可能方法吗?

java - 需要有关如何将宠物对象放入数组中的帮助吗?

Ruby 模块/枚举检索奇数值

javascript - 从数组中按属性查找对象

ruby - 为什么需要 ":nodoc:"语法?

ruby - 在 Capybara 中,:exact or Capybara. 是否完全适用于 have_selector?

javascript - 如何在 JavaScript 中将字符串数组转换为对象数组?

java - 将返回 false 的变量放入自己的数组中

Ruby正则表达式方法!~

ruby - 了解 Ruby 和操作系统 I/O 缓冲