gpt4 book ai didi

ruby sort_by 多个字段

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

我正在运行 Ruby 1.9.3p392。

Item = Struct.new( :name, :dir, :sort_dir )

entries = ftp.list()
entries.map!{|e| Net::FTP::List.parse(e) }.map!{|e| Item.new( e.basename, e.dir?, (e.dir? ? 0 : 1) ) }

render json: entries.sort_by{ |e| [ e.sort_dir, e.name ]}

出于某种原因,我没有得到预期的结果。

我确实首先获取了所有文件夹,然后是所有文件,但是,名称排序失败。

例如,我为我的文件夹获取了这些:

  1. 内容
  2. 图片

对于文件:

  1. 全局.asax
  2. 网络配置
  3. 网站图标.ico

它对目录/文件部分进行了正确分组,但名称排序不正确。

排序后控制台的输出如下所示:

#<struct FtpController::Item name="Content", dir=true, sort_dir=0>
#<struct FtpController::Item name="Images", dir=true, sort_dir=0>
#<struct FtpController::Item name="Scripts", dir=true, sort_dir=0>
#<struct FtpController::Item name="Views", dir=true, sort_dir=0>
#<struct FtpController::Item name="bin", dir=true, sort_dir=0>
#<struct FtpController::Item name="Global.asax", dir=false, sort_dir=1>
#<struct FtpController::Item name="Web.config", dir=false, sort_dir=1>
#<struct FtpController::Item name="favicon.ico", dir=false, sort_dir=1>
#<struct FtpController::Item name="packages.config", dir=false, sort_dir=1>
#<struct FtpController::Item name="robots.txt", dir=false, sort_dir=1>

最佳答案

您的排序在 MRI Ruby 1.8.7、1.9.3 和 2.0.0 中正常工作:

Item = Struct.new(:name, :dir, :sort_dir)

entries = [Item.new('favicon.ico', false, 1), Item.new('bin', true, 0),
Item.new('web.config', false, 1), Item.new('images', true, 0),
Item.new('global.asax', false, 1), Item.new('content', true, 0)]

entries.sort_by{|e| [e.sort_dir, e.name]}
# => [#<struct Item name="bin", dir=true, sort_dir=0>,
# #<struct Item name="content", dir=true, sort_dir=0>,
# #<struct Item name="images", dir=true, sort_dir=0>,
# #<struct Item name="favicon.ico", dir=false, sort_dir=1>,
# #<struct Item name="global.asax", dir=false, sort_dir=1>,
# #<struct Item name="web.config", dir=false, sort_dir=1>]

您是否尝试过将 sort_by 的结果输出到控制台?我不熟悉您代码的 render json: 部分,但也许这就是问题所在。我最好的猜测是,在转换为 JSON 时(如果这是它所做的)排序会变得困惑。

我的另一个想法是,也许您希望 sort_by 修改 entries;它不是。如果您希望 entries 本身在调用后进行排序,请使用 sort_by!(注意方法名称末尾的 !)。

更新:看起来问题是您需要不区分大小写的搜索。只需添加 upcase 即可解决问题:

entries.sort_by{|e| [e.sort_dir, e.name.upcase]}

关于ruby sort_by 多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17076372/

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