Je recherche un équivalent de la fonction Haskell InsterPerse à Ruby. Fondamentalement, cela ajoutez quelque chose (comme un séparateur) entre chaque élément d'une liste. Je ne demande aucun code (je peux le faire, et je l'aurais probablement fait avant vous lisez la question). Je me demandais simplement si une fonction de ce type existe déjà sur la plate-forme rubis standard. P> Je ne demande aucun code, et surtout ceux qui aplatissent l'aplatir, comme cela n'a pas 'T Travail (Aplatissez-vous non seulement un niveau plat, mais tout).
J'ai donné l'exemple [1,2,3] simplement comme exemple, mais cela devrait fonctionner avec p> (s'il vous plaît ne m'envoyez pas de code pour que cela fonctionne, Je l'ai déjà p> ) p> p> Mise à jour h3>
4 Réponses :
No code> p>
Ajouterait une butée complète rendre la réponse trop verbeuse? :)
C'est vraiment la seule question qui répond à la question qui a été posée; pas la question que les gens pensaient avoir été posé. Upvoted. rejoindre code> est probablement le plus proche "thumatiquement".
semble similaire à zip ...
peut-être quelque chose comme ceci: p> utilisation: p>
Ce n'est pas tout à fait raison. Essayez de passer autre chose que nil code> - il est utilisé uniquement dans la première place. Le reste par défaut i> à
nil code>. Vous pouvez le réparer en utilisant
itemcle.cycle code>
Tu as raison! Je ne peux pas croire que cela s'est assis pendant 5 ans avant que quelqu'un ait remarqué le bogue. Fixé.
Non, pas que je sache. Mais vous pouvez toujours Vérifiez-vous .
La seule méthode similaire (en passant : Ruby est une langue orientée objet, il n'y a pas une "fonction" en ruby) est Comme vous l'avez dit, il est trivial à mettre en œuvre, par exemple comme celui-ci: P> array # jointure code>, qui mappe les éléments à la chaîne et les interpare avec un séparateur.
Enumérable # INTERSPERSE code> serait essentiellement une généralisation de celle-là. P>
class Array
def join(sep=$,)
map(&:to_s).intersperse(s ||= sep.to_str).reduce('', :<<)
end
end
J'aime comment la question indique explicitement pas i> pour poster une implémentation et seulement i> répondez à la question si une telle méthode existe déjà et toutes les trois réponses ignorent la demande et deux de Trois ne répondent même pas à la question :-)
Parce que lorsque les gens posent des questions comme celle-ci, elles ne semblent jamais vraiment heureuses d'une réponse "non" - et d'ailleurs, ce n'est pas assez de personnages :)
En proposant une alternative, c'est un "non" implicite. Mais qu'est-ce que c'est le plaisir de répondre à une question oui / aucune question que vous dites, peut être vérifiée dans quelques secondes?
Juste hors de curiosité, si Ruby n'a pas de fonctions, quelle est la Lambda?
@gnibbler, j'aurais été heureux avec un "non". Devinez que je dois y répondre mystériel et accepter mon propre non ;-)
@Mark, cela pourrait être vérifié dans quelques secondes, seulement si la réponse est oui. Aucune ne pas trouver dans le doc ne veut dire que rien n'existe.
@ Jörg: Pensez-vous qu'il devrait y avoir une demande de fonctionnalité pour INTERSPERSE?
@Andrew Grimm: J'y pense. J'ai aussi consulté énumérable # numérisation code>. En fait, je peux simplement lire l'ensemble de l'ensemble Scaladocs et Haddocks pour les bibliothèques de collections de Scala et Haskell et vérifiez laquelle de la fonctionnalité manquante est logique pour Ruby. Nous avons déjà Scala's
Flatmap CODE> dans RUBY 1.9.2 AS
Enumérable # Flat_map Code> /
Enumérable # Concat_Collect Code>.
@Jorg: C'est génial, je ne suis pas sûr que mon patron (et l'équipe) sera heureux si je commence à l'utiliser.
Je suis venu ici avec la même question et j'ai rassemblé que la réponse est toujours "non", mais je voulais rêver une mise en œuvre plus efficace. Est venu avec ces approches mutatives et non mutatives:
Je suis tenté de baliser ce
plz-net-envoyer-th-codez code>!
@andrew: Je voudrais simplement étiqueter
plz-lecture-question code> ;-)
Aplatissez non seulement un niveau plat, mais tout i> - pas vrai. Vous spécifiez le niveau d'aplatissement maximum comme argument facultatif. Voir ma réponse pour un exemple.
@Jorg: Point Pris, même si toutes les réponses n'ont pas utilisé ce paramètre facultatif. Je pensais que ce n'est pas parce que le (doc) [ ruby-doc.org /core/classes/array.html#m002218] (premier coup Google) ne le mentionne pas (alors j'ai voté pour votre réponse).
Ce sont les documents pour Ruby 1.8.6 (publié 2007-03-13). Les deux rubis 1.9.0 (publiés 2007-12-28) et Ruby 1.8.7 (publiés 2008-06-01) l'ont. Voir RDOC.INFO/DOCS/RUBY-CORE/1.8.7 / Array # Flatten-instance_Method et rdoc.info /docs/ruby-core/1.9.2/array#flatten-instance_method
@Jorg: Merci, je viens de faire google et, comme aucun numéro de version n'apparaît dans l'URL, je pensais que ce serait la DOC officielle à jour à jour. Quoi qu'il en soit, nous utilisons toujours Rubi 1.8.6 au travail à certains endroits.
Demande de fonctionnalité pertinente: bugs.ruby-lang.org/issues/16946