2010-10-20 31 views
8

¿Cuál es la manera más rápida de convertir una matriz de flotadores en una cadena en C#?¿Cuál es la forma más rápida de convertir una matriz de flotadores en una cadena?

Si mi matriz contiene este { 0.1, 1.1, 1.0, 0.2 }

entonces quiero cada entrada a convertir en una cadena con valores separados por un espacio en blanco, es decir "0.1 1.1 1.0 0.2"

+1

¿Puede describir el resultado que espera? –

+1

¿Qué significa 'más rápido'? Funcionamiento en tiempo de ejecución (¿qué objetivo?), Menos líneas de código, el código más legible, etc ... – jv42

+0

Solo necesito algo que me evite los bucles –

Respuesta

16

Me gustaría obtener el string.Join más legible que también debería tener un rendimiento suficiente en la mayoría de los casos. A menos que haya un problema real, no me corro mi propia:

float[] values = { 1.0f, 2.0f, 3.0f }; 
string s = string.Join(" ", values); 

Podría ser que leí mal su pregunta, por lo que en caso de que quiera una enumeración de string ir con las otras respuestas.

+0

Probablemente, simplemente llamará 'float.ToString()' para cada elemento en la matriz – abatishchev

+0

Déjame intentarlo –

+0

No está compilando. Dice que "Unirse" tiene algunos argumentos inválidos. –

3

Usted puede hacerlo de esta manera:

var floatsAsString = yourFloatArray.Select(f => f.ToString(CultureInfo.CurrentCulture)); 
+0

Edité mi pregunta –

3
float[] arr = { 1.0f, 2.1f }; 
var str = arr.Select(x => x.ToString()).ToArray(); 

o utilizar rray.ConvertAll

public static string FloatFToString(float f) 
{ 
    return f.ToString(); 
} 

float[] a = { 1.0f, 2.1f }; 
var res = Array.ConvertAll(a, new Converter<float, string>(FloatFToString)); 
7

Para ser más explícitos, llaman float.ToString() manualmente y luego string.Join() para separar cada resultado con un espacio:

var array = new float[] { 0.1, 1.1, 1.0, 0.2 }; 
string result = String.Join(" ", array.Select(f => f.ToString(CultureInfo.CurrentCulture)); 

por cierto,

en .NET 2.0/3.0/3.5 sólo hay solo String.Join(string, string[])

pero en .NET 4.0 también hay String.Join<T>(string, IEnumerable<T>)

@ 0xA3 usa el método de .NET 4. 0. Mío también. Así que para las versiones anteriores utilizan array.Select(..).ToArray()

+1

Esta parece ser la respuesta más completa. –

-2

me gusta el enfoque con el uso de Enumerable.Aggregate método:

float[] array = new float[] { .1f, .2f, .3f, .4f, .5f }; 
string s = array.AsEnumerable().Aggregate<float, string, string>("", (a, e) => a += string.Format(" {0}", e), r => r.Trim()); 

trabaja rápido.

+0

Amigo, eres el hombre, ¡gracias! –

+3

Usar 'String.Concat' y' String.Format' definitivamente es muy ineficiente – abatishchev

+0

@abatishchev Entonces, ¿cuál es la mejor manera? – iburlakov

Cuestiones relacionadas