如何更改数组的一些随机元素

时间:2018-04-08 23:08:15

标签: ruby

我想随机改变数组的一个或多个元素。例如,使用原始数组:

original = ['john', '124 Gore st', 20, 'manager']

更改后:

new_array = ['johnz', '124 Gore st', 'hall22', 'manager']

我这样做了:

x = %w(hello there world)
x.collect! { |element|
  random_ele = x.sample
  (element == random_ele) ? "newele" : element
}
puts x.to_s

它正在运作。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:2)

如果您只想替换部分条目:

require 'securerandom'

def swaperoo(array, factor)
  array.map do |e|
    if (SecureRandom.rand < factor)
      yield
    else
      e
    end
  end
end

就像你可以这样做:

original = ['john', '124 Gore st', 20, 'manager']

swaperoo(original, 0.1) do
  'hall%d' % SecureRandom.rand(1..100)
end

答案 1 :(得分:1)

您可以这样做:

substitute