Ruby: jak połączyć tablicę tablic w jedną

Mam tablicę tablic w Ruby on Rails (3.1), gdzie wszystkie wewnętrzne tablice są różnej wielkości. Czy istnieje sposób, aby łatwo połączyć wszystkie wewnętrzne tablice, aby uzyskać jedną dużą tablicę dimesional ze wszystkimi elementami?

Wiem, że możesz użyć funkcji Array::concat do połączenia dwóch tablic, a ja mógłbym zrobić pętlę, aby połączyć je kolejno w ten sposób:

concatenated = Array.new
array_of_arrays.each do |array|
    concatenated.concat(array)
end
[1]} ale chciałem wiedzieć, czy jest coś takiego jak Ruby one-liner, który zrobiłby to w pralce sposób. Dzięki za pomoc.
Author: Sparhawk, 2011-11-27

3 answers

Szukasz #flatten:

concatenated = array_of_arrays.flatten

Domyślnie, to spłaszczy listy rekurencyjnie. #flatten akceptuje opcjonalny argument, aby ograniczyć głębokość rekurencji – dokumentacja zawiera przykłady ilustrujące różnicę.

 131
Author: millimoose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-27 00:08:55

Lub bardziej ogólnie:

array_of_arrays.reduce(:concat)
 24
Author: d11wtq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-26 22:34:34

Możesz użyć flatten! metoda. np. a = [ 1, 2, [3, [4, 5] ] ] a.flatten! #=> [1, 2, 3, 4, 5]

 2
Author: Pankaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-29 10:47:11