如何从Ruby中的数组中删除单个值?

时间:2019-03-19 18:20:52

标签: arrays ruby

我想删除数组中最小值的第一个实例。

arr = [1,2,3,1,2,3]
arr.reject {|i| i == arr.min}
#=> [2,3,2,3]

但是我的代码删除了数组中所有最小值的实例。我想要这样的结果:

[...]
#=> [2,3,1,2,3]

解决此问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

第一次脸红时,有两个选择:

arr.delete_at(arr.index(arr.min))
# or less readable but still valid
arr.delete_at arr.index arr.min    
arr.delete_at(arr.each_with_index.min[1])
# or
arr.delete_at(arr.each_with_index.min.pop)
# or
arr.delete_at(arr.each_with_index.min.last)

第一个是更少的代码,更易读,但是在列表中进行了两次而不是一次。我怀疑是否还有其他构造会在(可能(或可能不会)如此丑陋的)优雅方面超过选项#1。

请注意,这两个选择都会在一个空数组上崩溃。这是一个更安全的版本:

arr.delete_at arr.index(arr.min) || 0

答案 1 :(得分:1)

只是出于好奇:

[1,2,3,1,2,3].tap { |a| a.delete_at a.each_with_index.min.last }
#⇒ [2, 3, 1, 2, 3]

答案 2 :(得分:1)

您可以为此目的使用Enumerable#drop_while

arr = [1,2,3,1,2,3]
arr.drop_while { |i| i == arr.min }
#=> [2, 3, 1, 2, 3]