Ruby 从数组中删除一个元素

3
我想从数组中删除(只有一个)特定数值的元素。
示例:
x = [1,2,3,2]
x.remove(2)


result: x= [1,3]

但是,我想要得到[1,3,2]

谢谢。


1
当您调用 1 时,您是想删除特定数字还是数组的第一个数字? - 7urkm3n
1
你可以使用 .delete_at(数组索引) 来删除元素,或者像从 [1,2,3,4,1][1,2,3,4] 一样保持唯一性。只需调用 x.uniq 即可。 - 7urkm3n
我不想保留唯一的数组,我只需要删除客户输入的数字,如果我有x = [1,1,1],我想保留[1,1]。 - ayoubben
3个回答

8

如评论中 @7urkm3n 提到的,你可以使用 x.delete_at 来删除第一个出现的元素。

x.delete_at(x.index 2)

> x = [1,2,3,2]
=> [1, 2, 3, 2] 
> x.delete_at(x.index 2)
=> 2 
> x
=> [1, 3, 2] 

我在思考delete_at和slice!的性能问题...它们应该是差不多的。 - stecb

0

你可以使用 slice!(index, 1)。你可以通过使用 index(element) 获取要删除的元素的第一个索引。

在你的情况下,你只需要执行:x.slice!(x.index(2), 1)(或者,如已经提到的,只需提供索引即可使用delete_at


0

你可以编写

x = [1,2,3,2]
x.difference([2])
  #=> [1, 3, 2]

这里的Array#difference是我在这里中定义的。由于该方法具有广泛的潜在应用,因此我建议将其添加到Ruby核心中。

假设

x = [1,2,3,2,1,2,4,2]

如果你想要移除第一个 1,前两个 24,你需要写下以下代码:

x.difference([1,2,2,4])
  #=> [3, 1, 2, 2]

请注意:
x.difference([1,2,2,4,4,5])
  #=> [3, 1, 2, 2]

会得到相同的结果。

要删除最后一个1最后两个24,请写入

x.reverse.difference([1,2,2,4]).reverse
  #=> [1, 2, 3, 2]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接