Ruby 1.9.3p392を実行しています。ruby sort_by複数のフィールド
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 ]}
何らかの理由で、結果が期待どおりに戻っていません。
すべてのフォルダのあとにすべてのファイルが続きますが、名前の並べ替えに失敗しています。
例として、私は自分のフォルダに対してこれらを取得する:
- コンテンツ
- 画像
- ビン
ファイルの場合:
- Global.asaxの
- web.configファイル
- favicon.icoを
ITグループは、dir/fileの部分に正しいが、名前が間違って並べ替えられています。コンソールへ
出力はソートした後、次のようになります
#<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>
コンソールの出力を元の質問に含めました。また、エントリ自体がソートされることは期待していません。ソートされたリストをレンダリングメソッドに戻すことを期待しています。しかし、私が戻ってきたコンソールとコンソールの出力が一致します。 – Mike
@Mike問題は大文字小文字の区別が必要な場合があります。あなたの出力はソートされているので、最初は大文字だけです。 –
あなたのコメントを回答として追加することができますので、私はそれが正しいと投票することができます。私は名前にダウンケースを追加し、期待どおりに動作しています。ありがとう! – Mike