Ruby как убрать [] скобки из массива? - PullRequest
0 голосов
/ 16 января 2012

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

[[16], [14], [13], [17], [18], [15, 16], [15, 14], [15, 13], [15, 17], [15, 18], [16, 14], [16, 13], [16, 17], [16, 18], [14, 13], [14, 17], [14, 18], [13, 17], [13, 18], [17, 18], [15, 16, 14], [15, 16, 13], [15, 16, 17], [15, 16, 18], [15, 14, 13], [15, 14, 17], [15, 14, 18], [15, 13, 17], [15, 13, 18], [15, 17, 18], [16, 14, 13], [16, 14, 17], [16, 14, 18], [16, 13, 17], [16, 13, 18], [16, 17, 18], [14, 13, 17], [14, 13, 18], [14, 17, 18]]

Как убрать некоторые скобки массива [], чтобы массив выглядел следующим образом:

[16, 14, 13, 17, 18, [15, 16], ..., [14, 13, 18], [14, 17, 18]]

Ответы [ 3 ]

3 голосов
/ 16 января 2012
new_arr = arr.collect { |a| a.size == 1 ? a[0] : a }

Или на месте:

arr.collect! { |a| a.size == 1 ? a[0] : a }

Выход для неверующих:

[1] pry(main)> arr = [[16], [14], [15, 16], [15, 14], [15, 16, 17], [15, 16, 18]]
=> [[16], [14], [15, 16], [15, 14], [15, 16, 17], [15, 16, 18]]
[3] pry(main)> new_arr = arr.collect { |a| a.size == 1 ? a[0] : a }
=> [16, 14, [15, 16], [15, 14], [15, 16, 17], [15, 16, 18]]
# Note that arr is unchanged at this point.
[5] pry(main)> arr.collect! { |a| a.size == 1 ? a[0] : a }
=> [16, 14, [15, 16], [15, 14], [15, 16, 17], [15, 16, 18]]
[6] pry(main)> arr
=> [16, 14, [15, 16], [15, 14], [15, 16, 17], [15, 16, 18]]
1 голос
/ 16 января 2012

это не очень элегантно, но вы получите то, что хотите:)

b = [[16], [14], [13], [17], [18], [15, 16], [15, 14], [15, 13], [15, 17], [15, 18], [16, 14], [16, 13], [16, 17], [16, 18], [14, 13], [14, 17], [14, 18], [13, 17], [13, 18], [17, 18], [15, 16, 14], [15, 16, 13], [15, 16, 17], [15, 16, 18], [15, 14, 13], [15, 14, 17], [15, 14, 18], [15, 13, 17], [15, 13, 18], [15, 17, 18], [16, 14, 13], [16, 14, 17], [16, 14, 18], [16, 13, 17], [16, 13, 18], [16, 17, 18], [14, 13, 17], [14, 13, 18], [14, 17, 18]]

b.collect { |c| c.count() ==  1 ? c[0] : c }
0 голосов
/ 16 января 2012

Этот вопрос немного неясен. Кажется, у вас есть массив массивов, да? Если это так, вы можете сделать что-то вроде этого

count = 0
array.each { |x|
  if x.is_a?(Array)
    if x.length == 1
      array[count] = x[0]
    end
  end
  count = count + 1
}

Это можно сделать немного красивее, но оно должно делать то, что вы хотите, если вам нужно поменять массив из одного элемента на целое число. Однако я не совсем уверен, что вы можете сделать это в Ruby - иметь массив, который представляет собой массив целых чисел и массивов, - но я думаю, что вы можете (вы не могли сделать что-то подобное в Java).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...