2016-05-18 2 views
1

Я работаю из this exercise в codewars, который должен выравниваться массивом (до одного уровня глубокого), так что, например, я хочу, чтобы получить выходы:Одношагового уплощение массива в рубине

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

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

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

я решил использовать «впрыснуть» - где на следующий элемент будет добавлен к нарастающему итогу, если этот элемент является массивом, или просто толкнул, если это не так:

def flatten(array) 
    array.inject([]) {|result,element| element.kind_of?(Array) result.concat(element) : result<<element} 
end 

Может кто-нибудь объяснить, почему я получаю следующая синтаксическая ошибка?

-e:3: syntax error, unexpected tIDENTIFIER, expecting '}' 
... element.kind_of?(Array) result.concat(element) : result< 
+0

Также только добавить, я не используя встроенный метод сплющивания, потому что он слишком глубок: [[[3], [4], [5]], [9], [9], [8], [[1,2,3] ]]), [[3], [4], [5], 9,9,8, [1,2,3]] – user25959

+0

Ваша ссылка требует подписки, не могли бы вы разместить exe rcise? – Stefan

ответ

3

Вы получили ошибку потому что вы пропустили в тройном заявлении на ?:

element.kind_of?(Array) ? result.concat(element) : result<<element 

Для вашей цели вы можете использовать Array#flatten с аргументом:

array.flatten(1) 
[[1,2],3].flatten(1) 
=> [1, 2, 3] 
[[1,[2]],3].flatten(1) 
=> [1, [2], 3] 
+0

Благодарим вас за обе части информации! – user25959

+0

@ user25959, добро пожаловать – Ilya

+0

@ user25959 Обязательно отметьте ответ правильно, если этот ответ сработал для вас. – BananaNeil

Смежные вопросы