为什么数组使用map和each_slice插入null

时间:2015-04-10 03:27:11

标签: ruby

我想现在从[22,22]到[3,3]手动切片和修改数组。

我正在

  

[nil,3,nil]

输出以下代码

def boom(array)

    array.map!.each_slice(2) do |a|
        a[0] = 3
        a[1] = 3 
        a[2] = 3
    end
    array
end

p boom([22,22, 22])

不确定为什么[1]被替换但现在是[0]和[2]

2 个答案:

答案 0 :(得分:0)

从您的评论中,您似乎想要以3个元素的块来修改原始数组; map!.with_index允许您使用模数来确定您所处的位置:

def boom(array)
    array.map!.with_index do |el, idx|
      if idx % 3 == 0
        3
      elsif idx % 3 == 1
        4
      else
        5
      end
    end
    array
end

boom([22, 22, 22]) #=> [3, 4, 5]

显然,无论你想要什么,只需要3,4和5。

答案 1 :(得分:-2)

试试这个:

def dynamic_value(a)
  # do something with a
end

def boom(array)
  array.map! do |a|
    dynamic_value(a)
  end
  array
end

p boom([22, 22, 22])