2015-04-13 3 views
0

Мне нужно извлечь часть массива на основе целого числа, и если значений нет, заполните этот массив значениями спецификаций, если размер массива не совпадает с этим целым числом.Subarray ruby ​​extract from integer

В качестве примера:

У меня есть массив вроде этого:

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

Если мое целое число 2 мне это нужно:

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

Если мое целое число 4 мне это нужно:

[[1,2], [2,1], [3,3], [nil, nil]] 
+0

по какой причине вам нужно это поведение? – gaussblurinc

+0

Это для создания файла xlsx с несколькими лимитированными таблицами –

ответ

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]] 
+0

Работайте тоже! –

+2

Вы можете использовать fetch для возврата значения по умолчанию: 'array.fetch (i, [nil, nil])' – Stefan

+0

@Stefan Да ... Я всегда забыл этот хороший метод .. Спасибо за указатель .. –

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]] 
+0

Работайте как шарм! Я люблю тебя так сильно !!! –

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]] 
+0

Хороший. . 'Array.new()' хорошо. –

+0

Я только что заметил, что @Doguita отправил (затем удалил) одно и то же решение через несколько секунд после того, как я опубликовал. У нас, должно быть, был ум. Вероятно, это объясняет, почему я думал о красивой женщине по имени Гертруда, с которой я никогда не встречался. –

+0

Ницца. BTW, 'a.fetch (i, [nil, nil])' работает здесь тоже. – Stefan