gpt4 book ai didi

ruby - 按方法的结果对哈希进行排序,将 nil 结果排序到底部

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:36 25 4
gpt4 key购买 nike

def valueize(val)
# randomly returns nil or random integer ([-100 to +100] + val)
((rand(100) % 3) == 0) ? nil : (rand(200)-100+val)
end

hash = {
x: 11,
y: 22,
z: 33
}

sort_by_abs = hash.sort_by{ |k, v| (valueize(v)).abs }
sort_by_min = hash.sort_by{ |k, v| (valueize(v)) }
sort_by_max = hash.sort_by{ |k, v| -(valueize(v)) }

对于三种类型中的每一种,确保 nil 结果始终排序到底部的最 ruby​​ish 方法是什么?

条件:

  • 潜在散列值的范围未知(散列值将始终为整数)
  • valueize 方法不能被修改
  • 排序 block 可以修改

最佳答案

一个简单的方法(使用 ick 的 maybe 只是为了保持紧凑,如果你觉得更舒服的话,做一个赋值 + 条件):

inf = Float::INFINITY
sort_by_abs = hash.sort_by { |k, v| valueize(v).maybe.abs || inf }
sort_by_min = hash.sort_by { |k, v| valueize(v) || inf }
sort_by_max = hash.sort_by { |k, v| valueize(v).maybe.send(:-@) || inf }

关于ruby - 按方法的结果对哈希进行排序,将 nil 结果排序到底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12997016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com