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

Ruby 从数组中弹出匹配元素,然后将它们推回,ruby,arrays,Ruby,Arrays,假设我有一个数组:[1,2,3,4,5] 给定另一个数组([2,4],例如),我希望有一个新数组(或者修改初始数组,没关系),看起来像:[1,3,5,2,4]。因此,选定的元素将移动到数组的末尾 将元素向后推非常简单,但是如何从数组中弹出特定的元素呢 a = [1, 2, 3, 4, 5] b = [2, 4] (a - b) + (b & a) #=> [1, 3, 5, 2, 4] a-b是a中的元素,而不是b中的元素,而b&a是两个数组中常见的元素。这就是您的预期结果。如

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

给定另一个数组(
[2,4]
,例如),我希望有一个新数组(或者修改初始数组,没关系),看起来像:
[1,3,5,2,4]
。因此,选定的元素将移动到数组的末尾

将元素向后推非常简单,但是如何从数组中弹出特定的元素呢

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

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

a-b
a
中的元素,而不是
b
中的元素,而
b&a
是两个数组中常见的元素。这就是您的预期结果。

如果
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]

我将
(a-b)+(b&a)
保存第二个数组中元素的顺序。虽然这取决于OP想要什么。如果
a
的元素不是唯一的,结果可能不是预期的。为什么不干脆
(a-b)+b
我建议你先做
b=[4,2]
,然后再做
(a-b)+b
[1,3,5,4,2]或者
(a-b)+[1,3,5,2,4]
,取决于最后两个元素的所需顺序。给定另一个数组
[4,2]
,结果是
[1,3,5,2,4]
还是
[1,3,5,4,2]
,或者两者中的任何一个?最好按相同的顺序推送元素