Ruby提取整数的子数组

时间:2015-04-13 15:17:02

标签: ruby

我需要基于整数提取数组的一部分,如果没有足够的值,如果数组大小不是这个整数的英尺,则用特定值填充此数组。

例如:

我有一个这样的数组:

[[1,2], [2,1], [3,3]]

如果我的整数是2,我需要这个:

[[1,2], [2,1]]

如果我的整数是4,我需要这个:

[[1,2], [2,1], [3,3], [nil, nil]]

3 个答案:

答案 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]]