从Array中删除其中一个

时间:2012-06-18 15:43:57

标签: ruby

我有一个多次包含一些元素的数组。现在我想创建一个新数组,删除其中一个元素。

示例:

a = [1,1,1,2]
delete_index = a.find_index(1)
result = a.clone
result.delete_at(delete_index)
# result is now [1,1,2]

对于这么简单的任务,这段代码看起来很难看。我看了一下Array提供的方法,但找不到更好的方法。

3 个答案:

答案 0 :(得分:2)

a.delete_at(a.index(1) || a.length)

a.length处理未找到元素的情况;因为它超出了范围,所以不会删除任何内容,并且您的返回值将为nil

如果你的问题的一部分要对数组的副本执行此操作,只需在clone上调用它:

a2 = a.clone ; a2.delete_at(...)

如果要对每个重复元素执行此操作,可以将其链接到选择重复元素的块:

a.select { |e| array.count(e) > 1 }.each { |dup| a.delete_at a.index(dup) }

答案 1 :(得分:1)

你可以猴子补丁阵列:

class Array
  def delete_first_occurrence(o)
    delete_at(find_index(o) || length)
    self
  end
end

a = [1,1,1,2]
result = a.clone.delete_first_occurrence(1)
 => [1, 1, 2]

答案 2 :(得分:0)

我不能说,但听起来你只是想从阵列中删除重复项。如果是这种情况,它就像array.uniq一样简单,它将返回一个删除了所有重复项的新数组。如果您想要修改原始数组,可以使用array.uniq!代替。

如果这不是您要完成的任务,请通过一些示例输入和输出来更新您的问题。