从数组中弹出匹配元素,然后将它们推回

时间:2015-01-20 11:53:39

标签: ruby arrays

说我有一个数组:[1, 2, 3, 4, 5]

给定另一个数组(例如[2, 4]),我想要一个新的数组(或修改的初始数组,并不重要),如下所示:[1, 3, 5, 2, 4]。因此,选定的元素将移动到数组的末尾。

推回元素非常简单,但如何从数组中弹出特定元素?

2 个答案:

答案 0 :(得分:7)

a = [1, 2, 3, 4, 5]
b = [2, 4]

(a - b) + (b & a)
#=> [1, 3, 5, 2, 4]

a - ba中的元素,但不是b中的元素,而b & a是两个数组中常见的元素。达到预期的效果。

答案 1 :(得分:1)

如果a中的元素不是uniq(如eugen所述),并且从b中删除一个元素非常重要,那么您可以执行以下操作:

a = [1, 2, 3, 2, 4, 5, 4, 2]
b = [2, 4, 7]
p (b&a).unshift(a.map{|el|
    b.include?(el) ? begin b = b -[el]; nil end : el
  }.compact).flatten

#=> [1, 3, 2, 5, 4, 2, 2, 4]