有更简洁的方式来写这个吗?我不喜欢那个代码重复。
# Adds the content of two arrays except the first cell because the first cell is a string
# The arrays don't have to be the same length.
# * *Args* :
# - +a+ -> first array
# - +b+ -> second array
#
def add_array(a,b)
if a.size >= b.size then
a.map.with_index{ |m,i|if i != 0 then m + b[i].to_i else m end}
else
b.map.with_index{ |m,i|if i != 0 then m + a[i].to_i else m end}
end
end
输入示例:
arr1 = ["foo",1,2,3,4,5]
arr2 = []
arr3 = ["foo",2,4,6,5,7,8,9,4,5,6]
arr2 = add_array(arr1, arr2)
puts arr2.inspect
arr2 = add_array(arr2, arr3)
puts arr2.inspect
输出:
["foo", 1, 2 ,3 ,4 ,5]
["foo", 3, 6, 9, 9, 12, 8, 9, 4, 5, 6]
随意评论/批评和表达你的想象力!
感谢。
答案 0 :(得分:2)
以我谦虚的新手意见;
def add_array(a,b)
a, b = b, a if b.size > a.size
a.map.with_index{ |m,i|if i != 0 then m + b[i].to_i else m end}
end
编辑:Polonium的建议更好。
答案 1 :(得分:1)
第一步:
def add_array(a,b)
if a.size > b.size then
a.map.with_index{ |m, i| if i != 0 then m + b[i].to_i else m end}
else
add_array(b, a)
end
end
答案 2 :(得分:1)
def add_array(a,b)
a.map.with_index { |m, i| i.zero? && m || m + choose(a, b)[i].to_i }
end
def choose(a, b)
if a.size > b.size
b
else
a
end
end
根据大小选择数组的顺序意味着你可以在其他地方使用它。
删除if if是我努力的目标。
所有样本数据都已经是整数,但我将强制保留为整数。
答案 3 :(得分:1)
def add_array(a,b)
a.size > b.size ? merge_arrays(a,b) : merge_arrays(b,a)
end
def merge_arrays(a,b)
a.map.with_index{ |m,i|if i != 0 then m + b[i].to_i else m end}
end
在这种情况下,对阵列大小的检查只进行一次。我介绍了这个新功能,以确保它更具可读性。