【问题标题】:Merging arrays without losing original order, ruby合并数组而不丢失原始顺序,红宝石
【发布时间】:2012-04-30 18:07:21
【问题描述】:

我有一个数组结构,如下所示:

a=[
  [['a','A'],['b','B'],['c','C']],
  [['d','D'],['e','E'],['f','F']]
]

如何合并内部的两个数组,使新结构成为数组数组

[
 ['a','A'],['b','B'],['c','C'],['d','D'],['e','E'],['f','F']
]

试过了

a.inject([]){|k,v| v | k} # but order gets changed
=> [["d", "D"], ["e", "E"], ["f", "F"], ["a", "A"], ["b", "B"], ["c", "C"]]

如何在不丢失订单的情况下获得理想的结果。

请给点提示、cmets、建议?

谢谢。

【问题讨论】:

  • 你想set-wise union内部数组还是连接它们?你希望[ [['a','A']], [['a','A']] ] 发生什么?
  • [ ['a','A'] ] 在这种情况下是所需的输出
  • 我想要明智的联合。我用 v|k 而不是 k|v 做了一个傻事

标签: ruby arrays merge


【解决方案1】:

试试这个:

a.inject([]){|k,v| k|v}

【讨论】:

  • 或者,更短的,a.inject(&:|)(哈哈,带着滑稽帽子的困惑笑脸!)
  • 是的。我刚试过这个,在得到你的答案之前。我的错。这是一个愚蠢的问题。
  • @MladenJablanović,你能解释一下(简要)这个 a.inject(&:|) 是如何工作的。我知道,您使用 '&' 作为每个元素的缩写。
  • 非常相似的问题在这里:stackoverflow.com/questions/5003257/… 里面也有很多链接。
  • @MladenJablanović- a.inject(:|) 也可以。在这种情况下不需要 & 。干杯...
【解决方案2】:

array.flatten 带参数:

a.flatten(1) #[["a", "A"], ["b", "B"], ["c", "C"], ["d", "D"], ["e", "E"], ["f", "F"]]

【讨论】:

  • 哇!那是很好的解决方案。我一直在尝试不带参数的扁平化,它给出 ["a", "A", "b", "B", "c", "C", "d", "D", "e", "E ", "f", "F"] 你能在这里解释一下参数的需要吗?谢谢
  • 该参数指定要展平多少级别。默认为“全部”;在这种情况下,只需 1 级就足够了。
猜你喜欢
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
  • 2021-06-22
  • 2013-10-19
  • 1970-01-01
  • 2012-09-13
  • 2010-12-18
相关资源
最近更新 更多