我有一个如下所示的数组:[[3, 1], 4, [3, 3, 4], 4, :sync, 1, 2]
我想通过数组进行映射,然后......
这是我到目前为止所做的,但它非常难看。有没有更好的方法来写这个?
也许我可以某种方式使用#tap
?
work.map! do |w|
if w.is_a? Array
w[0] = console.button_map[w[0]] || w[0]
w
else
console.button_map[w] || w
end
end
答案 0 :(得分:2)
我会使用Array()
来规范化输入,然后只有左边的情况:
work.map! do |w|
element = Array(w).first
console.button_map[element] || element
end
答案 1 :(得分:0)
我确定了这一点,不确定它是否更清洁:
work.map! do |w|
if w.is_a? Array
w.tap{|x| x[0] = console.button_map[x[0]] || x[0] }
else
console.button_map[w] || w
end
end
答案 2 :(得分:0)
work = [[3, 1], 4, [3, 3, 4], 4, :sync, 1, 2, [5]]
work.map! do |w|
val = my_method [*w].first
case w
when Array then [val, *w[1..-1]]
else val
end
end
def my_method(n)
case n
when Fixnum then n+4
else n.to_s
end
end
work
#=> [[7, 1], 8, [7, 3, 4], 8, "sync", 5, 6, [9]]
注意:
[*[1,2]] #=> [1,2]
[*3] #=> [3]