Sto eseguendo Ruby 1.9.3p392.ruby sort_by multiple fields
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 ]}
Per qualche motivo, non sto ottenendo i risultati come previsto.
Ricevo innanzitutto tutte le cartelle seguite da tutti i file, tuttavia l'ordinamento dei nomi non funziona.
Per fare un esempio, ottengo questi per le mie cartelle:
- contenuti
- immagini
- bin
Per i file:
- global.asax
- web.config
- favicon.ico
Raggruppa la parte dir/file corretto, ma i nomi sono ordinati in modo non corretto.
L'uscita per la console si presenta così dopo l'ordinamento:
#<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>
Ho incluso l'output della console nella domanda originale. Inoltre, non mi aspetto che le voci stesse vengano ordinate. Mi aspetto che restituisca una lista ordinata al metodo di rendering. Tuttavia, il JSON che torno e l'uscita della console corrisponde. – Mike
@Mike Sembra che il problema sia che si desidera un ordinamento in-sensitive, quindi? Perché il tuo output è ordinato, prima solo maiuscolo. –
puoi aggiungere il tuo commento come risposta in modo da poterlo votare come corretto. Ho aggiunto un downcase per nominare e funziona come previsto. Grazie! – Mike