Ajouter une chaîne dans une boucle de manière efficace

Pendant longtemps, j’ajoute toujours une chaîne de la manière suivante.

Par exemple, si je souhaite obtenir tous les noms d’employés séparés par un symbole, dans l’exemple ci-dessous, j’ai opté pour le symbole de canal.

ssortingng final = ssortingng.Empty;

foreach(Employee emp in EmployeeList) { final+=emp.Name+"|"; // if i want to separate them by pipe symbol } 

à la fin je fais une sous-chaîne et enlève le dernier symbole de tuyau car il n’est pas nécessaire

 final=final.Subssortingng(0,final.length-1); 

Y at-il un moyen efficace de le faire.

Je ne veux pas apposer le symbole de pipe pour le dernier élément et refaire une sous-chaîne.

Utilisez ssortingng.Join() et une projection Linq avec Select() place:

 finalSsortingng = ssortingng.Join("|", EmployeeList.Select( x=> x.Name)); 

Trois raisons pour lesquelles cette approche est meilleure:

  1. Il est beaucoup plus concis et lisible – il exprime l’ intention , pas la façon dont vous voulez atteindre votre objective (dans votre
    case concaténation de chaînes dans une boucle). L’utilisation d’une projection simple avec Linq aide également ici.

  2. Il est optimisé par la structure en ssortingng.Join() performances: dans la plupart des cas, ssortingng.Join() utilisera un SsortingngBuilder interne, de sorte que vous ne créez pas plusieurs chaînes qui sont ensuite non référencées et doivent être récupérées. Voir aussi: Ne pas concaténer des chaînes dans des boucles

  3. Vous n’avez pas à vous soucier de cas particuliers . ssortingng.Join() gère automatiquement la casse du «dernier élément» après lequel vous ne voulez pas d’un autre séparateur, encore une fois, cela simplifie votre code et le rend moins sujet aux erreurs.

Vous devriez rejoindre vos chaînes.

Exemple (emprunté à MSDN):

 using System; class Sample { public static void Main() { Ssortingng[] val = {"apple", "orange", "grape", "pear"}; Ssortingng sep = ", "; Ssortingng result; Console.WriteLine("sep = '{0}'", sep); Console.WriteLine("val[] = {{'{0}' '{1}' '{2}' '{3}'}}", val[0], val[1], val[2], val[3]); result = Ssortingng.Join(sep, val, 1, 2); Console.WriteLine("Ssortingng.Join(sep, val, 1, 2) = '{0}'", result); } } 

J’aime utiliser la fonction d’agrégation dans linq, telle que:

 ssortingng[] words = { "one", "two", "three" }; var res = words.Aggregate((current, next) => current + ", " + next); 

Pour votre dernier problème, laissez simplement le dernier ajout en dehors de la boucle.

 int size = EmployeeList.length() for(int i = 0; i < size - 1; i++) { final+=EmployeeList.getEmployee(i).Name+"|"; } final+=EmployeeList.getEmployee(size-1).Name; 

Pour construire de la sorte, SsortingngBuilder est probablement un meilleur choix.