J'ai une liste de livres et des dates publiées que je devrais formater comme indiqué ci-dessous j'ai essayé stringbuilder p> Mais montrant les données côte à côte, c'est où je suis bloqué, toute aide sera appréciée. p> p>
5 Réponses :
Padright code> pour ajouter suffisamment '< code>. code> '"caractères" à gauche aligner le texte comme vous avez dans votre exemple. LI>
- Utilisez
PADRIGHT code> sur le texte de gauche-alignement, et padleft code> sur le texte d'aligner à droite. LI>
-
padleft code> et PADRIGHT code> S ARGUME est la longueur de la chaîne maximum em> et n'est pas le nombre de caractères de rembourrage à ajouter. LI>
- Utilisez un format de date explicite
mm-yy code> Pour vous assurer que toutes les sorties sont de 5 caractères (et pour éviter toute ambiguïté, vous devez utiliser des formats ISO 8601 et éviter toujours des années à 2 chiffres). Li>
- Affichage de plusieurs colonnes sur la même ligne nécessite un compteur distinct pour compter le nombre d'éléments écrites à la ligne actuelle jusqu'à présent et n'ajoute qu'une pause de ligne après avoir écrit 2 éléments à une ligne. LI>
xxx pré> ul> Oui.
De plus, vous voudrez peut-être ajouter 1 à ce longestName, sinon le nom le plus long ne sera pas séparateur à la date.
@Brettcaswell je l'ai couru à Linqpad et j'ai eu des résultats attendus. Vous n'avez pas besoin de soustraire une longueur car PADRIGHT CODE> Est-ce que pour vous.
Ah .. tu as raison .. j'étais présomptueux .. désolé. Je devrais avoir un double vérifié avant d'avoir posté le commentaire - je ne suis pas sûr de ce que "non aligné" suggère ici alors ..
Je vais donc vous donner une option que vous devrez développer pour travailler pour tous les scénarios em>, mais cela devrait vous faire aller si vous l'aimez. J'utilise également une liste de chaînes comme un exemple simple; Vous ne devriez avoir aucun problème à l'appliquer à Vous avez une seule liste d'éléments à afficher dans deux colonnes, donc ce que vous pouvez faire est diviser l'original en deux et sortie: Suivi: Que se passe-t-il quand il y a un nombre impair d'éléments? em> p> p> P> book code> s. zip code> sauvegarder; Comme: p>
Premier: troisième
Deuxièmement: quatrième p>
En ce qui concerne votre suivi .. Le zip suit la même considération que l'approche de boucle que j'ai fournie .. Vous devrez déterminer et gérer de manière conditionnelle le dernier enregistrement ..
Effectuez ce qui suit: sortie: p>
En considération des autres réponses - je fournirai la boucle à l'aide de l'approche d'index.
Définissez vos types avec des données simulées p> < em> code d'exemple strong> em> p> Ceci émettra la suivante p> La boucle définie En raison de cette approche, nous avons un scénario où le dernier enregistrement peut ne pas être représenté dans la boucle - ce qui est bien puisque le corps de cette boucle est conçu pour toujours gérer 2 enregistrements à la fois, et nous " P> y compris la logique de remplissage (bien que le désir de cette réponse soit de présenter l'approche d'index de la boucle, non fournir nécessairement un échantillon de travail terminé) p> p> i code> comme itérateur sur l'index; p>
1 code> et nous ajouterons 2 code> pour chaque itération de la LOPP jusqu'à ce que i code> est plus grand puis max code> ou plutôt - la longueur de la liste. ( I - 1 code> représentera ensuite l'enregistrement précédent, i code> sera plus tard (ou même enregistrera, mais dans un ensemble de tableau de 0-index) li>
ul> EDIT 1: H3>
Un moyen de produire une liste d'éléments du format de colonne consiste à déterminer le nombre de lignes (en divisant le nombre d'éléments à compter du nombre de colonnes et en ajoutant 1 si le nombre n'est pas uniformément divisible par le nombre de colonnes), et Ensuite, la sortie de "Colonne Nombre" Nombre d'éléments formatés sur la largeur de la colonne.
Nous pouvons écrire une méthode qui prend dans une liste des chaînes, puis émet les chaînes en colonnes d'une largeur spécifique: p>
// Note we can make our columns smaller and add more of them
columnWidth = 16;
columnCount = 4;
header = "Book".PadRight(columnWidth - 5) + "Date";
OutputInColumns(books.Select(b => AsColumnString(b, columnWidth)).ToList(), columnCount,
columnWidth, header);
Après avoir exécuté votre solution, je reçois une exception d'exception {"L'index et la longueur doivent se référer à un emplacement de la chaîne. \ R \ nparamètre Nom: longueur"} system.argumentoutofrangeException à var nom = livre.substring (0, Wridth - 8) .padright (Columinawidth - 5, '.');
Oh, bonne prise! J'ai eu mis à jour le code sur ma machine mais j'ai oublié de le publier ici. J'ai mis à jour l'échantillon maintenant. Merci.
Vous devez prendre 2 à la fois, car il y a 2 livres sur chaque ligne
Juste une note:
stringbililater code> a une méthode code> appendline code> afin de ne pas avoir besoin de concaténer lenouvelle ligne code> sur là ...Donc, vous ne triez pas les éléments de rien, vous voulez simplement le formater en deux colonnes?
S'il vous plaît être explicite sur ce que vous essayez d'accomplir. C'est-à-dire que je pense que vous essayez d'obtenir deux enregistrements à la fois. Est-ce exact? Si oui, mettez à jour votre question indiquant que
Vous devez envisager d'utiliser une boucle et des index ou potentiellement une opération de fermeture à glissière. Dans un moyen créatif
Vous souciez-vous de la commande?
non je ne me soucie pas de l'ordre dans lequel ils se présentent
oui je ne trie pas par rien