Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将数组值插入另一个数组的随机位置_Arrays_Ruby - Fatal编程技术网

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
      的全部目的就是返回一个新的散列。我明白了。我没有注意到结果应该以新数组返回。