gpt4 book ai didi

ruby - 按可能为 nil 的属性对对象的 ruby​​ 数组进行排序

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

我有一个对象数组,我需要按可以是整数或 nil 的位置属性对其进行排序,并且我需要具有 nil 位置的对象位于数组的末尾。现在,我可以强制位置返回一些值而不是 nil,这样 array.sort 就不会失败,但是如果我使用 0 作为默认值,那么它会将这些对象放在排序的前面。做这种事情的最好方法是什么?我是否应该将 nil 值设置为一些“几乎”总是保证在末尾的高得离谱的数字?还是有其他方法可以使 array.sort 方法将 nil 属性对象放在数组的末尾?代码如下所示:

class Parent
def sorted_children
children.sort{|a, b| a.position <=> b.position}
end
end

class Child
def position
category ? category.position : #what should the else be??
end
end

现在,如果我将“else”设为 1000000000,那么它很可能会将它们放在数组的末尾,但我不喜欢这个解决方案,因为它是任意的

最佳答案

我只是调整您的排序,将 nil 项放在最后。尝试这样的事情。

foo = [nil, -3, 100, 4, 6, nil, 4, nil, 23]

foo.sort { |a,b| a && b ? a <=> b : a ? -1 : 1 }

=> [-3, 4, 4, 6, 23, 100, nil, nil, nil]

也就是说:如果 a 和 b 都不是 nil,则按正常方式对它们进行排序,但如果其中一个为 nil,则返回一个将那个更大的排序的状态。

关于ruby - 按可能为 nil 的属性对对象的 ruby​​ 数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/808318/

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