"9213533", :units=>["Meters", "Feet", "Yards"], :freq-6ren">
gpt4 book ai didi

ruby - 在ruby中对数组进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:42 25 4
gpt4 key购买 nike

如何对如下所示的数组进行排序:

[["9213533",
{:length=>"9213533",
:units=>["Meters", "Feet", "Yards"],
:frequency=>3}],
[nil,
{:length=>nil, :units=>["Feet"], :frequency=>1}],
["5951975",
{:length=>"5951975", :units=>["Yards"], :frequency=>1}],
["9100799",
{:length=>"9100799", :units=>["Feet"], :frequency=>1}]]

我想对它进行排序,以便 arrays 数组的第一个元素 nil 像这样(排序)来到最后一个地方:

[["9213533",
{:length=>"9213533",
:units=>["Meters", "Feet", "Yards"],
:frequency=>3}],
["5951975",
{:length=>"5951975", :units=>["Yards"], :frequency=>1}],
["9100799",
{:length=>"9100799", :units=>["Feet"], :frequency=>1}]],
[nil,
{:length=>nil, :units=>["Feet"], :frequency=>1}]

我试过按方法排序(arr 是我的数组):

arr.sort_by{|a,b| b[:length] unless a.nil?}

得到这个异常:

ArgumentError: comparison of NilClass with String failed
from (pry):395:in `sort_by

最佳答案

arr2 = arr.sort_by { |k, h| k ? [0, h[:length].to_i] : [1] }

或者:

arr2 = arr.sort_by { |k, h| k ? h[:length].to_i : Float::INFINITY }

[Edit] 这就是我认为你在代码中提出的要求,但实际上你要求将第一个 nil 放在最后,这是完全不同的事情:

idx = arr.index { |k, h| k.nil? }
arr2 = idx ? [arr[0...idx] + arr[idx+1..-1], arr[idx]] : [arr, nil]

关于ruby - 在ruby中对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17321128/

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