2013-06-24 25 views
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?我看起来似乎在外面工作,而不是从里面出来。

+1

你可能要考虑你为什么以第一种形式而不是第二种形式获得阵列。当我以第一种形式看到数据时,通常是因为我做错了什么,需要重新考虑我的代码。 –

+0

@theTinMan,好点。作为产品调用的结果,我正在获取该表单中的数据。我将发布调用语法以显示它是如何生成的。 –

+0

这有效。当真正的问题需要一些重构或者一种不同的方法来修复很多其他代码时,我们常常会遇到有关症状的问题,因为有人寻求绷带。 –

回答

4

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

+0

这取决于你想要一个破坏性的还是非破坏性的版本。 OMG的答案是非破坏性的答案。 –

+2

@JanDvorak是的,但op说:“我想把它变成这个”,所以我认为原来不会需要 – leonhart

+0

谢谢,我选择了这一个,因为我不需要原来的。我希望我可以给这两个答案一半的支票。感谢大家。 –

9

你可以使用flattenmap

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"]] 
+1

注意'&:flatten'至少需要Ruby 1.9.3或类似的版本。 –

+0

@JanDvorak我应该在帖子中提到它,这就是为什么我给出了两种形式的答案。 –

+1

在答案中添加版本信息总是很好。 “从1.x.x开始,你也可以做\ n ...” –