¿Alguna forma elegante de convertir una colección IList en una cadena de identificadores separados por comas?Convierte una colección IList <int> en una lista separada por comas
"1,234,2,324,324,2"
¿Alguna forma elegante de convertir una colección IList en una cadena de identificadores separados por comas?Convierte una colección IList <int> en una lista separada por comas
"1,234,2,324,324,2"
IList<int> list = new List<int>(new int[] { 1, 2, 3 });
Console.WriteLine(string.Join(",", list.Select(i => i.ToString()).ToArray()));
No funciona. ForEach() se define en la lista
Fue mi error, corregido –
De todos modos estaba mal, no estoy seguro de por qué escribí ForEach ... –
que puede hacer:
// Given: IList<int> collection;
string commaSeparatedInts = string.Join(",",collection.Select(i => i.ToString()).ToArray());
Esto lo hará
IList<int> strings = new List<int>(new int[] { 1,2,3,4 });
string[] myStrings = strings.Select(s => s.ToString()).ToArray();
string joined = string.Join(",", myStrings);
o totalmente con LINQ
string aggr = strings.Select(s=> s.ToString()).Aggregate((agg, item) => agg + "," + item);
// list = IList<MyObject>
var strBuilder = new System.Text.StringBuilder();
foreach(var obj in list)
{
strBuilder.Append(obj.ToString());
strBuilder.Append(",");
}
strBuilder = strBuilder.SubString(0, strBuilder.Length -1);
return strBuilder.ToString();
Una buena opción, siempre he encontrado que StringBuilder es mucho más rápido en la concatenación. ¡Especialmente útil si el tamaño de la lista es GRANDE! –
StringBuilder.SubString no existe, lo que quiere es StringBuilder.ToString (int startIndex, int length) – Trillian
List<int> intList = new List<int>{1,234,2,324,324,2};
var str = intList.Select(i => i.ToString()).Aggregate((i1,i2) => string.Format("{0},{1}",i1,i2));
Console.WriteLine(str);
Sería útil que la persona que votara una respuesta dejara un comentario de por qué se rechazó. ¡Esta es una solución perfectamente legítima para el problema! –
Sí, legítimo, simplemente no la forma más sencilla de hacerlo. El sistema de clasificación consiste simplemente en obtener las mejores respuestas para la parte superior. –
Me imagino que una respuesta se votaría solo si es incorrecta, inexacta o si carece de detalles. ¡La mayoría de las respuestas publicadas aquí usando LINQ no son necesariamente "simples"! –
mstrickland tiene una buena idea sobre el uso de generador de cadenas debido a su velocidad con listas más grandes. Sin embargo, no puede establecer un generador de cadenas como una cadena. Prueba esto en su lugar.
var strBuilder = new StringBuilder();
foreach (var obj in list)
{
strBuilder.Append(obj.ToString());
strBuilder.Append(",");
}
return strBuilder.ToString(0, strBuilder.Length - 1);
¿No es esto lo suficientemente cerca de su otra pregunta? –