En Ruby, je voudrais convertir un String slash-distinct tel que "foo/bar/baz" dans ["foo/bar/baz", "foo/bar", "foo"]. J'ai déjà des solutions de quelques lignes de long; Je suis à la recherche d'un one-liner élégant. Il doit également travailler pour des nombres arbitraires de segments (0 et plus).Le moyen le plus simple de convertir "a/b/c" en ["a/b/c", "a/b", "a"]
Répondre
Les plus annotées des œuvres de réponse, mais voici un peu plus court moyen de le faire que je pense que ce sera plus facile à lire pour ceux qui ne connaissent pas toutes les fonctionnalités qui y sont utilisés:
a=[]; s.scan(/\/|$/){a << $`}
Le résultat est enregistré dans a
:
> s = 'abc/def/ghi'
> a=[]; s.scan(/\/|$/){a << $`}
> a
["abc", "abc/def", "abc/def/ghi"]
Si l'ordre est important, vous pouvez inverser le tableau ou utiliser unshift
au lieu de <<
.
Merci à dkubb, et à l'OP pour les améliorations apportées à cette réponse.
Sur ruby 1.8.7 le résultat est seulement # => "abc/def/ghi" et non le tableau comme spécifié dans la réponse – nas
@nas: La valeur de retour sera la chaîne dans n'importe quelle version de ruby. Le tableau demandé sera dans la variable 'a'. Si vous étiez au courant de cela et que vous étiez en train de cogner, n'hésitez pas à ignorer mon commentaire. – sepp2k
Vous pouvez simplifier le code dans le bloc en procédant comme suit: a = []; 'abc/def/ghi'.scan (/ \/| $ /) {a << $ '} – dkubb
"foo/bar/baz".enum_for(:scan, %r{/|$}).map {Regexp.last_match.pre_match}
'Enumérateur' FTW! –
Wow. C'est presque du lisp sans toutes les parens. –
bon! Code plus facile "foo/bar/baz" .enum_for (: scan,% r {/ | $}). Map {$ '} – user3673267
Pas tout à fait aussi efficace que la réponse choisie et donne []
quand donné une chaîne vide, plutôt que [""]
, mais son un vrai paquebot: P
s.split('/').inject([]) { |a,d| a.unshift([a.first,d].compact.join('/')) }
->(l,s,z){
(t = s[/#{z}.[^\/]*/]) && [l[l,s,t], t]
}.tap{ |l|
break l[l,'a/b/c','']
}.flatten.compact
Oups, ce n'est pas le plus simple ... – Nakilon
- 1. RegEx: mise en correspondance et en remplaçant ABC dans "AB ABC D"
- 2. Comment désassembler le bytecode ABC?
- 3. Expression régulière correspondant à A, AB, ABC, mais pas AC. ("commence par")
- 4. comment remplacer 'abc' à 'a \ 0 \ 0C'
- 5. Le paramètre "abc" est manquant une valeur
- 6. Existe-t-il un moyen de convertir un swf en un fichier .abc?
- 7. Conversion VB -> C#. Expression régulière à modifier ("abc") dans ["abc"]
- 8. problème de recherche: ABC = abc en C# comment résoudre ce problème?
- 9. ABC Virtual ostream Insertion opérateur
- 10. "select abc de (sélectionner 1) abc" produit "(1)" au lieu de "1"
- 11. Que signifie ABC dans WCF?
- 12. En JavaScript ou jQuery, comment convertir une seule chaîne avec trois mots ("abc def hij") dans le format codé url: "abc + def + hij"?
- 13. WCF - Débutants question sur Adresse (de ABC)
- 14. Est-ce que Ruby a une méthode intégrée string.startswith ("abc")?
- 15. rediriger de localhost à localhost/abc/
- 16. Le moyen le plus simple de convertir un NSString en son équivalent en devises Cocoa
- 17. Comment mettre en œuvre un SIMPLE "Vous avez tapé ACB, voulez-vous dire ABC?"
- 18. Comment utiliser RewriteRule dans Apache pour rediriger depuis/abc/vers/abc?
- 19. ABC PDF - créer 256 images couleur
- 20. Quel est le moyen le plus simple de convertir xml en html?
- 21. Le moyen le plus simple de convertir une URL en lien hypertexte dans une chaîne C#?
- 22. Quel est le moyen le plus simple de convertir les balises de table en CSS standard?
- 23. NSMutableArray. Quel est le moyen le plus rapide pour le convertir en un tableau C simple?
- 24. L'accès au chemin '\\ Image0 \ Abc' est refusé
- 25. Quel est le moyen le plus simple de convertir un octet Int32 en String?
- 26. Le moyen le plus efficace de convertir BCD en binaire
- 27. Le moyen le plus simple d'incrémenter une date en PHP?
- 28. Microsoft.XLANGs.Core.ServiceCreationException: Échec lors de la création d'un service ABC
- 29. Le moyen le plus simple de faire pivoter un rectangle
- 30. Cocoa - moyen le plus simple de convertir la chaîne 'employeeName' en 'Employee Name'?
Vous ne connaissez 'FileUtils.mkdir_p', n'est-ce pas? – Svante