【问题标题】:How does one remove only 3 instances of the same digits in an Array when there are more than 3 in the Array?当数组中有超过 3 个时,如何仅删除数组中相同数字的 3 个实例?
【发布时间】:2011-06-30 11:17:28
【问题描述】:

假设我有一个数组,其中包含三个以上给定数字的重复。 我只想删除其中三个重复项,并将该数字的任何剩余实例留在结果数组中。

例如:

a = [2, 2, 2, 1, 6]
b = a.map{|i|
    num = a.select{|v| v == i}.size
    num == 3 ? "" : i
    }.reject{|v|
        v == ""
    }

给了我想要的结果:

b == [1, 6]

但是,在下面的示例中,我希望最后一个“2”保留在数组中。

# I want to reject ONLY triplets.
# In the below example, the last "2" should remain
a = [2, 2, 2, 1, 2]
b = a.map{|i|
    num = a.select{|v| v == i}.size
    num == 3 ? "" : i
    }.reject{|v|
        v == ""
    }

这里的结果是:

b == [2, 2, 2, 1, 2]

我希望结果是:

b == [1, 2]

我还有另一个代码块,类似于上面的代码块,使用了一些不同的逻辑,但最终得到了相同的结果:

a = [2, 2, 2, 1, 2]
newdice = a.reject { |v|
    if a.count(v) == 3
        x = v
    end
    v == x
    }

我不知所措,除了一些令人讨厌的诡计,包括查找 3x 重复数字的第一个实例的索引,并从中切出 [index, 2] 。必须有一种更“类似红宝石”的方式。

谢谢!

【问题讨论】:

  • 要删除前三个出现的 2,而不是第一次出现的连续三个 2?
  • 哪个位置会成为删除的目标?总是相同数字的前三个实例?元素总是一个数字吗?
  • @steenslag:2 的前三个出现。对于[2, 2, 2, 2, 2],我希望它返回[2, 2]。也可以是[2, 1, 2, 3, 2]
  • @sawa:是的,元素总是一个数字。职位无所谓。总是相同数字的前三个实例。
  • 请参阅下面的最后一条评论,了解我公认的笨重但有效的单线解决方案。感谢您的所有帮助!

标签: ruby select sequence digits


【解决方案1】:

这将删除前 3 个 = 2 的元素

3.times{a.index(2)? a.delete_at(a.index(2)) : nil }

如果您想删除数组中任何数字的前 3 位,则类似于:

(0..9).each{|n| 3.times{a.index(n)? a.delete_at(a.index(n)) : nil }}

Matt 的版本使用if-修饰符进一步修改:

(0..9).each{|n| {3.times{a.delete_at(a.index(n))} if a.count(n) >= 3}

【讨论】:

  • 太棒了。非常感谢!
  • 实际上,第二个想法,我意识到这适用于任何 UP TO 3 实例。我想删除 完全 3 个实例。不是 2,不是 4。不过,谢谢!我会继续努力。感谢您的帮助。
  • 我想出了这个,使用你的解决方案:a = [2, 2, 2, 1, 2] a.each{|v| a.count(v) >= 3 ? 3.times{a.index(v)? a.delete_at(a.index(v)) : nil } : nil }
  • 我添加了一些版本的马特的答案。
  • sawa:我没有意识到if 条件可以修改前面代码的条件。谢谢!
【解决方案2】:

不确定您希望如何显示项目,但如果您想使用以下是简单的选项

a = [2, 2, 2, 1, 2]
a.last(2) => [1,2]
a.uniq => [1,2]

【讨论】:

    猜你喜欢
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    相关资源
    最近更新 更多