Crear una lista separada por comas en C#

Fil Zjazel Romaeus Villegas 12 octubre 2023
  1. Uso del método String.Join() para crear una lista separada por comas en C#
  2. Uso del método agregado de LINQ para crear una lista separada por comas en C#
  3. Uso del método StringBuilder para crear una lista separada por comas en C#
Crear una lista separada por comas en C#

Este tutorial demostrará cómo crear una lista separada por comas a partir de contenedores como IList<string o IEnumerable<string> utilizando string.Join(), LINQ Aggregate, o StringBuilder.

Uso del método String.Join() para crear una lista separada por comas en C#

La forma más sencilla de unir los valores de un contenedor sería string.Join(). La función string.Join() toma todos los valores de una colección y los concatena con cualquier separador definido. Con este método, no solo puede hacer listas separadas por comas, sino también cualquier otro delimitador.

string joined_str = string.Join(separator, source);

El parámetro separador debe ser una cadena, mientras que el origen puede ser una colección de cualquier tipo de datos.

Ejemplo:

using System;
using System.Collections.Generic;

namespace StringJoin_Example {
  class Program {
    static void Main(string[] args) {
      // Initialize the IList
      IList<Int32> list_strings = new List<Int32> { 1, 2, 3 };
      // Join the IList with a comma
      string joined_list = string.Join(", ", list_strings);
      // Print the results
      Console.WriteLine("From List: " + joined_list);

      // Initialize the IEnumerable
      IEnumerable<string> enum_strings =
          new List<string>() { "Enum Sample 1", "Enum Sample 2", "Enum Sample 3" };
      // Join the IEnumerable with a semi colon
      string joined_enum = string.Join("; ", enum_strings);
      // Print the results
      Console.WriteLine("From Enumerable: " + joined_enum);

      Console.ReadLine();
    }
  }
}

En el ejemplo anterior, creamos dos fuentes diferentes: una lista de números enteros y una lista enumerable de cadenas. Luego los unimos usando el mismo método string.Join() con dos separadores diferentes y luego imprimimos las cadenas resultantes en la consola.

Producción :

From List: 1, 2, 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3

Uso del método agregado de LINQ para crear una lista separada por comas en C#

Otra opción para unir los valores de una colección sería utilizar el método LINQ Aggregate. Si bien es conveniente codificar, esto se considera ineficiente, especialmente cuanto mayor sea la entrada. Este método también generará un error si el recuento de entrada es inferior a uno, por lo que es posible que se requiera más manejo de errores para garantizar que esto se ejecute cada vez sin problemas.

string joined_str = input.Aggregate((x, y) => x + ", " + y);

Al igual que el primer método, puede usar cualquier entrada de cadena como separador, pero este método esperará que el valor del resultado sea el mismo que su entrada. Por ejemplo, si la colección de entrada fuera una lista de enteros, esta función no funcionaría.

Ejemplo:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqAggregate_Example {
  class Program {
    static void Main(string[] args) {
      // Initialize the IList
      IList<string> list_strings =
          new List<string> { "List Sample 1", "List Sample 2", "List Sample 3" };
      // Join the IList with a comma using LINQ Aggregate
      string joined_list = list_strings.Aggregate((x, y) => x + ", " + y);
      // Print the results
      Console.WriteLine("From List: " + joined_list);

      // Initialize the IEnumerable
      IEnumerable<string> enum_strings =
          new List<string>() { "Enum Sample 1", "Enum Sample 2", "Enum Sample 3" };
      // Join the IEnumerable with a semi colon using LINQ Aggregate
      string joined_enum = enum_strings.Aggregate((x, y) => x + "; " + y);
      // Print the results
      Console.WriteLine("From Enumerable: " + joined_enum);

      Console.ReadLine();
    }
  }
}

En el ejemplo anterior, unimos las dos colecciones usando el método LINQ Aggregate. Las variables x e y se pueden cambiar a cualquier nombre de variable que desee. La idea detrás de este método es que concatena la cadena anterior a la cadena siguiente en caso de que todavía haya valores para unir.

Producción :

From List: List Sample 1, List Sample 2, List Sample 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3

Uso del método StringBuilder para crear una lista separada por comas en C#

La última opción que discutiremos es el método StringBuilder. En comparación con los otros dos métodos, este requiere un poco más de código para escribir pero permite mucha más personalización. Dentro de la función, puede agregar más pasos para modificar los valores si lo desea. Por ejemplo, si pasa una lista de fechas y horas, puede combinar los valores mientras usa un formato de fecha y hora específico.

Ejemplo:

using System;
using System.Collections.Generic;
using System.Text;

namespace StringBuilder_Example {
  class Program {
    static void Main(string[] args) {
      // Initialize the IList
      IList<string> list_strings =
          new List<string> { "List Sample 1", "List Sample 2", "List Sample 3" };
      // Join the IList with a comma using the StringBuilder method
      string joined_list = join_collection(", ", list_strings);
      // Print the results
      Console.WriteLine("From List: " + joined_list);

      // Initialize the IEnumerable
      IEnumerable<string> enum_strings =
          new List<string>() { "Enum Sample 1", "Enum Sample 2", "Enum Sample 3" };
      // Join the IEnumerable with a semi colon using the StringBuilder method
      string joined_enum = join_collection("; ", enum_strings);
      // Print the results
      Console.WriteLine("From Enumerable: " + joined_enum);

      Console.ReadLine();
    }

    static string join_collection<T>(string separator, IEnumerable<T> values) {
      // Initialize StringBuilder
      StringBuilder sb = new StringBuilder();

      // Intialize the item counter
      int ctr = 0;
      foreach (T item in values) {
        string sep = "";
        if (ctr > 0) {
          // If the first item from the value collection has already been added, use the specified
          // separator This is to avoid printing the separator as the first value of the string
          sep = separator;
        }

        // Append the separator and the value as a string
        sb.Append(sep);
        sb.Append(item.ToString());
        ctr++;
      }

      // Return the built string
      return sb.ToString();
    }
  }
}

En el ejemplo anterior, unimos las colecciones usando nuestra función personalizada join_collection, que acepta un separador de cadenas y una colección enumerable. Luego, los valores se unen mediante un StringBuilder y se agregan los valores del separador y la colección.

Producción :

From List: List Sample 1, List Sample 2, List Sample 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3

Artículo relacionado - Csharp List