我正在使用Ruby 2.4。如果我想找到我的模型的数字属性的最大数量,我可以
max_num = my_objects_arr.maximum(:numeric_attr)
但是如何在数组中找到其值恰好出现两次的最大属性数?也就是说,假设我的对象数组有三个对象
obj1 - numeric_attr = 3
obj2 - numeric_attr = 3
obj3 - numeric_attr = 4
上面出现两次的属性的最大值为“3”。虽然“4”是所有属性的最大值,但它只在阵列中出现一次。
答案 0 :(得分:2)
array = [1, 2, 3, 2, 3, 4]
array.group_by { |e| e } # group_by(&:itself) since 2.3
.select { |_, v| v.count == 2 }
.keys
.max
#⇒ 3
对象和属性:
my_objects_arr.group_by { |o| o.numeric_attr }
.select { |_, v| v.count == 2 }
.keys
.max
自己获取对象:
my_objects_arr.group_by { |o| o.numeric_attr }
.select { |_, v| v.count == 2 }
.max_by(&:first)
.last
答案 1 :(得分:2)
由于您正在使用轨道计算,例如0 1975-05-28 14:42:41.430
1 1975-05-28 14:42:41.430
2 1975-05-28 15:15:50.338
Name: timestamp, dtype: datetime64[ns]
这应该对你有用
#maximum
这会找到my_objects_arr
.group(:numeric_attr)
.having("count(numeric_attr) = 2")
.maximum(:numeric_attr)
的最大值,方法是按numeric_attr
对其进行分组,然后选择恰好为2的numeric_attr
SQL估算
numeric_attr
答案 2 :(得分:1)