je dois code suivant dans Ruby:Dans Ruby, comment lister/trier les fichiers avant les dossiers dans une liste de répertoires?
<%
files = Dir.glob('/**/*')
files.each do |file|
puts file
end
%>
Il produit (par exemple):
/dirA/file1.txt
/dirA/file2.txt
/dirB/file1.txt
/file1.txt
/file2.txt
/subdirA/file1.txt
Je veux à la sortie comme ceci:
/file1.txt
/file2.txt
/dirA/file1.txt
/dirA/file2.txt
/dirB/file1.txt
/subdirA/file1.txt
Fondamentalement, je J'aimerais avoir les fichiers affichés avant les répertoires. Y a-t-il une commande de tri que je peux utiliser?
qui fonctionne !! MERCI! –
'Enumerable # sort_by' rend la transformation Schwartzian plus facile à suivre, et' String # count' fonctionne à la fois sur 1.8 et 1.9: 'files = Dir.glob ('**/*'). Sort_by {| file | [fichier.count ("/"), fichier]} '. (Le tableau est toujours nécessaire pour rompre les liens entre les noms de fichiers avec le même nombre de barres obliques.) – bk1e
Je ne comprends pas pourquoi 'sort_by' serait nécessaire; critère de tri de tableau devrait être correct, non? (comparez les premiers éléments, si c'est le même, passez au suivant.) Je ne veux pas mettre de comptage à l'intérieur du bloc de comparaison car ce serait inefficace (je ne pense pas que Ruby soit assez intelligent pour mémoriser tout seul). Je ne connaissais pas 'String # count'; Merci pour ça. L'utiliser serait certainement plus élégant. Je vais l'éditer. – Amadan