如何在Ruby数组中仅移除指定元素的重复项?
在Ruby中移除数组内指定元素的重复项
Ruby标准库并没有提供像uniq('removeme')这样直接指定元素去重的方法,但我们可以通过简单的自定义逻辑实现仅移除特定元素重复项的需求。
以下是两种实用的实现方式:
方法一:遍历跟踪法
通过遍历数组,记录是否已经保留过目标元素,仅保留该元素的首次出现,其他元素正常保留:
arr = ["hello", "removeme", "removeme", "hello", "testing"] target = "removeme" seen_target = false result = arr.each_with_object([]) do |item, res| if item == target res << item unless seen_target seen_target = true else res << item end end p result # => ["hello", "removeme", "hello", "testing"]
方法二:拆分合并法
将数组拆分为非目标元素集合和目标元素的首次出现,再按原位置合并:
arr = ["hello", "removeme", "removeme", "hello", "testing"] target = "removeme" non_target_elements = arr.reject { |item| item == target } first_target = arr.find { |item| item == target } result = if first_target target_index = arr.index(first_target) non_target_elements.insert(target_index, first_target) else non_target_elements end p result # => ["hello", "removeme", "hello", "testing"]
两种方法都能保持原数组的顺序,且仅移除指定元素的重复项,其他元素的重复会被保留。
内容的提问来源于stack exchange,提问作者oj5th
相关产品推荐
相关产品推荐

