我需要基于整数提取数组的一部分,如果没有足够的值,如果数组大小不是这个整数的英尺,则用特定值填充此数组。
例如:
我有一个这样的数组:
[[1,2], [2,1], [3,3]]
如果我的整数是2,我需要这个:
[[1,2], [2,1]]
如果我的整数是4,我需要这个:
[[1,2], [2,1], [3,3], [nil, nil]]
答案 0 :(得分:4)
您可以使用Fixnum#times
方法:
a = [[1,2], [2,1], [3,3]]
def extract_sub_array array, size
size.times.map { |i| array.fetch(i, [nil, nil]) }
end
extract_sub_array a, 2
# => [[1, 2], [2, 1]]
extract_sub_array a, 4
# => [[1, 2], [2, 1], [3, 3], [nil, nil]]
答案 1 :(得分:4)
def convert(a,n)
Array.new(n) { |i| a[i] || [nil,nil] }
end
a = [[1,2], [2,1], [3,3]]
convert(a,2) #=> [[1, 2], [2, 1]]
convert(a,3) #=> [[1, 2], [2, 1], [3, 3]]
convert(a,4) #=> [[1, 2], [2, 1], [3, 3], [nil, nil]]
convert(a,5) #=> [[1, 2], [2, 1], [3, 3], [nil, nil], [nil, nil]]
答案 2 :(得分:3)
假设指定了desired_length
并且数组名为arr
:
arr = [[1,2], [2,1], [3,3]]
# Will shrink an array or fill it with nils
# @param arr [Array] an array
# @param desired_length [Integer] the target length
def yo arr, desired_length
arr[0...desired_length] + [[nil,nil]]*[0,desired_length-arr.length].max
end
yo arr, 2
#⇒ [[1,2], [2,1]]
yo arr, 4
#⇒ [[1,2], [2,1], [3,3], [nil, nil]]