【发布时间】:2014-11-21 00:05:45
【问题描述】:
假设我有一个对象(或哈希)数组,如下所示 -
a = [ {salary: 10, products: 1}, {salary: 9, products: 1}, {salary: 10, products: 0} ]
如果数组中存在另一个元素在相同或更少的薪水下具有更高的产品值,我想从数组中删除元素。覆盖这两个实例的一些伪逻辑看起来像这样-
IF EXISTS 'other element' WITH >= products and < salary THEN DELETE
IF EXISTS 'other element' WITH > products and =< salary THEN DELETE
哪些 Ruby 方法可以帮助我完成此任务?
编辑:在上面的例子中,预期的输出是{salary: 9, products: 1}。应该删除第一个元素,因为还有另一个元素的薪水较低,但产品相同(或更高)。可以删除第三个元素,因为第一个元素具有相同薪水的更多产品,或者因为第二个元素具有更少薪水的更多产品。
【问题讨论】:
-
Array#max_by 和 Array#delete_if 或 Array#reject
-
我知道这些方法,但是如何将它们与其他元素进行比较?我正在想办法使用
select或include来引用块内的数组,看看是否存在这种情况。 -
只要使用delete_if或者reject...如果你知道这些方法,那我们为什么还要讨论这个呢?这是一个班轮。
-
您不需要将它们与其他元素进行比较,只需找到您要测试的值,然后使用它来构建 Array#reject 的谓词。
-
@IronSavior 对每个元素进行不同测试的值不是吗?这就是我理解问题的方式。