Disons que nous avons un tableau avec n elements (n> 0).
Nous souhaitons produire une liste de ces éléments, avec un séparateur entre eux. P>
une approche commune de Ce problème est: p> mais il semble un peu désordonné de devoir faire cela. P> Une autre approche serait la suivante: p> check that there is at least one element
loop
(
output element
next element, or break if no more elements
output separator
)
11 Réponses :
for (i = 0; i < n; ++i) switch(i) { default: output_separator(); case 0: output_item(i); } or variations on this. I can't really think of how else not to repeat output_item(i).
Manquant un cas code> avant que
0 code>
Cela ressemble à une sortie 0, puis de séparateurs N-1.
@Geoffrey - in c, commutateur code> a implicitement castthrough. Vous devez spécifiquement
BREAK CODE> pour éviter les cas de réussite.
Akin aussi, mais moins violant que le périphérique de Duff ( fr.wikipedia.org/wiki/duff%27s_device ). Paraphrasant, cela mérite un vote, mais je ne suis pas sûr de savoir si jusqu'à ce que jetais ou que je suis allé avec jusqu'à).
@Lijie - Je n'ai totalement pas simplement écrit une version générique de ceci qui prend un pointeur sur une fonction d'impression et un vide * code>. Et deux
taille_t code> s pour la longueur de la matrice et la taille de l'élément.
@Chris: Ce serait un exercice totalement instructif :)
for i in items.length-1; do output item; output separator output last item
Parfois: est plus court. p> p>
J'utilise toujours le premier article Cochez l'idiome. Voici le code en Java:
List<Object> list; if (list.size() > 0) { put(list.get(0)); } for(int i = 1; i < list.size(); i++) { putSeparator(); put(list.get(i)); }
char *sep = ""; for (i = 0; i < size; ++i) { printf("%s%s", sep, item[i]); sep = ", "; }
Comme il est marqué comme langue-agnostique, je pense qu'il est important de souligner que certaines langues ont des fonctionnalités intégrées pour vous épargner de même de penser à ce problème. Prenez ce code Python par exemple:
Je pense que sa question s'apparente à la mise en œuvre de la méthode de la jointure.
@Geoffrey: Je ne suis pas d'accord, c'est une langue agnostique afin que la solution de jointure ne soit pas seulement incluse mais surlignée. Je ne peux pas vous dire à quelle fréquence je vois des débutants à des langues de haut niveau essayer de faire la chose à utiliser sans se rendre compte que la jointure est la bonne façon de le faire. Je le faisais moi-même.
Oh au fait, dans TCL, ce serait: met [jointure $ list ","] code> et je suppose que JavaScript pourrait être:
console.log (array.join (",")) code>
Objective-C: [Composants de tableauJoingBystring: @ ","]
En commun Lisp, il est limitant sur simple, tant que vous pouvez coder le séparateur.
(defun return-delimited-list (list &optional stream) (format stream "~{~A~^, ~}" list))
une solution possible C ++:
http://groups.google.com/group /comp.lang.chan++/msg/a746a588cedfa44b p>
Résumé: Écrivez un infix_ostream_itéator code>, qui est fondamentalement identique à
ostream_iterator code> sauf que Le paramètre "Séparateur" est vraiment un séparateur, pas un suffixe à chaque article. L'utilisation serait alors: p>
Cette version évite toute branche supplémentaire: (pour ceux qui ont peur de goto code>, il peut être écrit à l'aide de l'approche de l'appareil de Duff's) P > p>
+2 Pour mentionner le périphérique de Duff, -1 pour n'utiliser pas le commutateur :)
@diebuddha L'interrupteur doit être à l'extérieur de la boucle, pas à l'intérieur de l'exemple de Lijie. Si vous pensez que c'est mieux qu'un goto, n'hésitez pas à l'utiliser :) Lecture intéressante: chiark.greenend.org.uk/~sgtatham/coroutines.html
Pour le meilleur ou le pire, j'utilise des boucles comptées, avec Je suis sûr que c'est un appât bownvote pour être démodé, mais cela fonctionne. P> Si quelqu'un veut me dire que c'est inefficace, garçon, j'ai une flamme prête à la flamme; -) em> p> p> p>
Il n'y a aucune raison de descendre une solution de travail. Je suppose avec des itérateurs qu'il devient si (i! = MyContainer.begin ()) code>?
+1. Absolument clair. À quiconque avancé: prédicteurs des succursales.
Le "premier chèque" idiome dans HASKELLL:
*Main> intersperse "," [1,2,3] "1,2,3" *Main> intersperse "," [1] "1" *Main> intersperse ";" [1,2] "1;2" *Main> intersperse "," [] ""
Je n'ai trouvé aucun dupliqué, mais il pourrait y avoir. Les termes de recherche ne sont pas faciles à trouver.
C'est plutôt une question de mise en œuvre qu'une question d'algorithme.
Vrai. J'ai ajouté la balise, merci.
Je doute que tout peut battre votre deuxième approche.
wiki selon la demande de @ Benoit.
Dupliqué possible de Listes d'impression avec les virgules C ++