2010-10-20 3 views
8

Что такое самый быстрый способ преобразования массива поплавков в строку в C#?Каков самый быстрый способ преобразования массива поплавков в строку?

Если мой массив содержит этот { 0.1, 1.1, 1.0, 0.2 }

Тогда я хочу каждую запись на конвертируется в строку со значением, разделенных пробелом, т.е. "0.1 1.1 1.0 0.2"

+1

Можете ли вы описать ожидаемый результат? –

+1

Что означает «самый быстрый»? Runtime performance (какой целевой?), Меньше строк кода, наиболее читаемый код и т. Д. – jv42

+0

Просто нужно что-то, что заставляет меня избегать циклов – 2010-10-20 10:20:46

ответ

16

Я бы выбрал наиболее читаемый string.Join, который также должен иметь достаточную производительность в большинстве случаев. Если не существует реальная проблема, я бы не запустить мой собственный:

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

Может быть, я неправильно понял ваш вопрос, так что в случае, если вы хотите перечисление string идти с другими ответами.

+0

Возможно, это просто вызовет 'float.ToString()' для каждого элемент в массиве – abatishchev

+0

Позвольте мне попробовать – 2010-10-20 10:30:44

+0

Не компилируется. Говорит, что «Join» имеет некоторые недопустимые аргументы. – 2010-10-20 10:42:43

3

Вы можете сделать это следующим образом:

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

Отредактировано мое мнение – 2010-10-20 10:21:36

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

или использовать 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

Чтобы быть более явным, вызовите float.ToString() вручную, а затем string.Join() для отделения каждого результата с пространством:

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

кстати,

в .NET 2.0/3.0/3.5 есть только одна String.Join(string, string[])

, но в .NET 4.0 есть также String.Join<T>(string, IEnumerable<T>)

@ 0xA3 использует метод из .NET 4. 0. Мой тоже. Таким образом, для более ранних версий используйте array.Select(..).ToArray()

+1

Это, кажется, самый полный ответ. –

-2

Мне нравится подход с использованием Enumerable.Aggregate метода:

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()); 

работает быстро.

+0

Чувак, ты мужчина, спасибо! – 2010-10-20 10:47:24

+3

Использование 'String.Concat' и' String.Format' определенно очень неэффективно – abatishchev

+0

@abatishchev Итак, что лучше? – iburlakov

Смежные вопросы