Arrays 将数组值插入另一个数组的随机位置
假设我有两个数组:Arrays 将数组值插入另一个数组的随机位置,arrays,ruby,Arrays,Ruby,假设我有两个数组: a = ["Fruit", "Emu", "Color"] b = ["Banana", "Name", "Orange"] 我想将b数组值插入a的随机位置。这两个阵列的可能输出为: c = ["Banana", "Fruit", "Emu", "Color", "Orange", "Name"] 这里,b数组值插入到a中,但值序列 “水果”→ “Emu”→ “颜色” a的运行不受阻碍。我该怎么做 这可能会起作用: a = [1, 2, 3] b = [:foo, :ba
a = ["Fruit", "Emu", "Color"]
b = ["Banana", "Name", "Orange"]
我想将b
数组值插入a
的随机位置。这两个阵列的可能输出为:
c = ["Banana", "Fruit", "Emu", "Color", "Orange", "Name"]
这里,b
数组值插入到a
中,但值序列
“水果”
→ <代码>“Emu”→ <代码>“颜色”
a
的运行不受阻碍。我该怎么做 这可能会起作用:
a = [1, 2, 3]
b = [:foo, :bar, :baz]
b.each_with_object(a.dup) { |e, ary| ary.insert(rand(0..ary.size), e) }
#=> [:baz, 1, 2, :foo, :bar, 3]
- 创建
的副本,该副本与a
的每个元素一起作为b
传递到块中ary
- 返回介于
(数组开头)和0
(数组结尾)之间的随机索引ari.size
- 在给定索引处插入当前元素
- 返回随机插入元素的复制数组
a = [1, 2, 3]
b = [:foo, :bar, :baz]
b.each_with_object(a.dup) { |e, ary| ary.insert(rand(0..ary.size), e) }
#=> [:baz, 1, 2, :foo, :bar, 3]
- 创建
的副本,该副本与a
的每个元素一起作为b
传递到块中ary
- 返回介于
(数组开头)和0
(数组结尾)之间的随机索引ari.size
- 在给定索引处插入当前元素
- 返回随机插入元素的复制数组
- 我认为最简单的方法如下
a = ["Fruit", "Emu", "Color"]
b = ["Banana", "Name", "Orange"]
b.each { |value| a.insert(rand(0..a.length), value) }
#=> ["Name", "Orange", "Fruit", "Emu", "Banana", "Color"]
对于b
的每个元素,将值插入到a
的随机索引中
这基本上是来自的答案,但没有
each_with_object
方法。我认为这种方法稍微干净一些,并且提供了相同的解决方案。我认为最简单的方法如下
a = ["Fruit", "Emu", "Color"]
b = ["Banana", "Name", "Orange"]
b.each { |value| a.insert(rand(0..a.length), value) }
#=> ["Name", "Orange", "Fruit", "Emu", "Banana", "Color"]
对于b
的每个元素,将值插入到a
的随机索引中
这基本上是来自的答案,但没有each_with_object
方法。我认为这种方式稍微干净一点,并提供了相同的解决方案。还有另一种方式:
def stuff_randomly(a,b)
sz_a = a.size
cpy_a = a.dup
(sz_a+b.size).times.to_a.shuffle.map do |i|
(i < sz_a) ? cpy_a.shift : b[i-sz_a]
end
end
a = [1, 2, 3]
b = [:foo, :bar, :baz]
10.times { p stuff_randomly(a,b) }
[:foo, 1, 2, 3, :bar, :baz]
[1, :baz, 2, :foo, 3, :bar]
[1, :foo, :bar, :baz, 2, 3]
[1, 2, 3, :foo, :bar, :baz]
[1, :bar, :foo, 2, 3, :baz]
[:foo, 1, :baz, 2, :bar, 3]
[:bar, 1, 2, 3, :foo, :baz]
[:bar, 1, :foo, :baz, 2, 3]
[1, 2, :baz, :bar, :foo, 3]
[1, :foo, :bar, 2, 3, :baz]
def stuff_随机(a、b)
sz_a=a.尺寸
cpy_a=a.dup
(sz_a+b.size).times.to_a.shuffle.map do|i|
(i
还有另一种方法:
def stuff_randomly(a,b)
sz_a = a.size
cpy_a = a.dup
(sz_a+b.size).times.to_a.shuffle.map do |i|
(i < sz_a) ? cpy_a.shift : b[i-sz_a]
end
end
a = [1, 2, 3]
b = [:foo, :bar, :baz]
10.times { p stuff_randomly(a,b) }
[:foo, 1, 2, 3, :bar, :baz]
[1, :baz, 2, :foo, 3, :bar]
[1, :foo, :bar, :baz, 2, 3]
[1, 2, 3, :foo, :bar, :baz]
[1, :bar, :foo, 2, 3, :baz]
[:foo, 1, :baz, 2, :bar, 3]
[:bar, 1, 2, 3, :foo, :baz]
[:bar, 1, :foo, :baz, 2, 3]
[1, 2, :baz, :bar, :foo, 3]
[1, :foo, :bar, 2, 3, :baz]
def stuff_随机(a、b)
sz_a=a.尺寸
cpy_a=a.dup
(sz_a+b.size).times.to_a.shuffle.map do|i|
(i
请向我们展示您的努力。@我还没有做任何事情。我假设我可以使用蛮力循环方法来做,但我想知道ruby中是否有什么东西可以轻松做到这一点。换句话说,我不想尝试,请为我编写代码。@。谢谢(我希望我的发音正确),我从来都不理解OPs显示失败代码的要求。如果它请求响应,生成的代码通常是人为的,特别是如果OP不知道从哪里开始。这也有点精英主义的味道,因为高代表性(而不是那么高的代表性)的提问者从未被要求生成代码。如果问题很清楚,而且不愚蠢,那对我来说就足够了。请让我们看看你的努力。@。我假设我可以使用蛮力循环方法来做,但我想知道ruby中是否有什么东西可以轻松做到这一点。换句话说,我不想尝试,请为我编写代码。@。谢谢(我希望我的发音正确),我从来都不理解OPs显示失败代码的要求。如果它请求响应,生成的代码通常是人为的,特别是如果OP不知道从哪里开始。这也有点精英主义的味道,因为高代表性(而不是那么高的代表性)的提问者从未被要求生成代码。如果问题很清楚,而且不愚蠢,那对我来说就足够了。谢谢@Stefan。你真是太棒了德汉克斯·斯特凡。你真是太棒了数据将修改a
。每个带有\u对象的\u
的全部目的就是返回一个新的散列。我明白了。我没有注意到应该在新数组中返回结果。这将修改a
。每个带有\u对象的\u
的全部目的就是返回一个新的散列。我明白了。我没有注意到结果应该以新数组返回。