我有一个包含多个相同元素的数组。现在我想创建一个新的数组,其中删除了其中一个元素。
例如:
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]
对于这么简单的任务,这段代码看起来真的很丑陋。我查看了数组提供的方法,但是找不到更好的做法。
我有一个包含多个相同元素的数组。现在我想创建一个新的数组,其中删除了其中一个元素。
例如:
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]
对于这么简单的任务,这段代码看起来真的很丑陋。我查看了数组提供的方法,但是找不到更好的做法。
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) }
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]
a.clone.delete_first_occurrence(3) #=> TypeError: no implicit conversion from nil to integer
- Michael Kohl我不是很确定,但听起来好像你只是想从数组中删除重复项。如果是这种情况,那么只需使用array.uniq
即可,它将返回一个新的数组,并删除所有重复项。如果您想直接修改原始数组,请改用array.uniq!
。
如果这不是您要完成的任务,请使用一些示例输入和输出更新您的问题。
a = [1,1,1,2]
,结果应该是[1,1,2]
? - Stefan