我有一个多次包含一些元素的数组。现在我想创建一个删除了其中一个元素的新数组。
例子:
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 提供的方法,但找不到更好的方法。
我有一个多次包含一些元素的数组。现在我想创建一个删除了其中一个元素的新数组。
例子:
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 提供的方法,但找不到更好的方法。
a.delete_at(a.index(1) || a.length)
a.length
处理未找到您的元素的情况;因为它超出了范围,所以不会删除任何内容,您的返回值将是nil
.
如果您的部分问题是对数组的副本执行此操作,只需在 a 上调用它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]
我不太清楚,但听起来你只是想从数组中删除重复项。如果是这种情况,它就像 一样简单array.uniq
,它将返回一个删除所有重复项的新数组。如果您想就地修改原始数组,则可以array.uniq!
改用。
如果这不是您想要完成的,请使用您想要完成的一些示例输入和输出来更新您的问题。