gpt4 book ai didi

ruby - 当订购有四种不同的条件时,如何在 ruby​​ 中订购数组?

转载 作者:数据小太阳 更新时间:2023-10-29 07:55:00 24 4
gpt4 key购买 nike

我不确定如何在 Ruby 中基于两个 bool 值对数组重新排序。我想按以下顺序排列我的结果:

* Note awkward ordering *
1) is_strong: true, requires_api_check: false
2) is_strong: true, requires_api_check: true
3) is_strong: false, requires_api_check: true
4) is_strong: false, requires_api_check: false

我写了一些伪代码来返回正确的顺序,但这行不通。我意识到我只能返回 -1,0,+1,但我不确定如何处理这种情况。

objects = [
OpenStruct.new(is_strong: false, requires_api_check: false),
OpenStruct.new(is_strong: false, requires_api_check: true),
OpenStruct.new(is_strong: true, requires_api_check: false),
OpenStruct.new(is_strong: true, requires_api_check: true),
]


objects.sort do |res|
if res.is_strong
if !res.requires_api_check
1
else
2
end
else
if res.requires_api_check
3
else
4
end
end
end

最佳答案

只需使用 sort_by通过 Enumerable 在 Arrays 上可用模块。

sort产生两个与 block 进行比较的对象,并期望值为 < 0 , 0> 0 .这允许您在可能不相关的对象之间定义自定义排序规则。

sort_by另一方面,只为 block 生成一个对象。从 block 中返回的任何内容都将用于比较。如果您在那里返回整数,您的最终数组将按这些原始整数值排序。

因此,鉴于您的“笨拙”排序规则,如果您使用 sort_by,您的代码可以正常工作而不是 sort无需根据 spaceship-operator 表达您的规则规则。

在下面的示例中,我只是用三元运算符稍微缩短了您的代码。

objects.sort_by do |res|
if res.is_strong
res.requires_api_check ? 2 : 1
else
res.requires_api_check ? 3 : 4
end
end

关于ruby - 当订购有四种不同的条件时,如何在 ruby​​ 中订购数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43857891/

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