2

我有这个数组:

[[["a", "c"], "e"],
 [["a", "c"], "f"],
 [["a", "c"], "g"],
 [["a", "d"], "e"],
 [["a", "d"], "f"],
 [["a", "d"], "g"],
 [["b", "c"], "e"],
 [["b", "c"], "f"],
 [["b", "c"], "g"],
 [["b", "d"], "e"],
 [["b", "d"], "f"],
 [["b", "d"], "g"]]

我想把它变成这样:

[["a", "c", "e"],
 ["a", "c", "f"],
 ["a", "c", "g"],
 ["a", "d", "e"],
 ["a", "d", "f"],
 ["a", "d", "g"],
 ["b", "c", "e"],
 ["b", "c", "f"],
 ["b", "c", "g"],
 ["b", "d", "e"],
 ["b", "d", "f"],
 ["b", "d", "g"]]

我怎样才能用 Ruby 做到这一点?我看过 flatten ,它似乎是从外向内工作,而不是从内向外工作。

4

2 回答 2

8

你可以使用flattenand map

ar.map! {|i| i.flatten}
 # => [["a", "c", "e"],
 #     ["a", "c", "f"],
 #     ["a", "c", "g"],
 #     ["a", "d", "e"],
 #     ["a", "d", "f"],
 #     ["a", "d", "g"],
 #     ["b", "c", "e"],
 #     ["b", "c", "f"],
 #     ["b", "c", "g"],
 #     ["b", "d", "e"],
 #     ["b", "d", "f"],
 #     ["b", "d", "g"]]

另一个单线是:

 ar.map!(&:flatten)

 # => [["a", "c", "e"],
 #     ["a", "c", "f"],
 #     ["a", "c", "g"],
 #     ["a", "d", "e"],
 #     ["a", "d", "f"],
 #     ["a", "d", "g"],
 #     ["b", "c", "e"],
 #     ["b", "c", "f"],
 #     ["b", "c", "g"],
 #     ["b", "d", "e"],
 #     ["b", "d", "f"],
 #     ["b", "d", "g"]]
于 2013-06-24T04:56:53.483 回答
4

或尝试arr.each {|i| i.flatten!}

于 2013-06-24T05:14:09.963 回答