2010-10-20 44 views
8

Cách nhanh nhất để chuyển đổi một mảng nổi thành chuỗi trong C# là gì?Cách nhanh nhất để chuyển đổi một mảng nổi thành chuỗi là gì?

Nếu mảng của tôi chứa này { 0.1, 1.1, 1.0, 0.2 }

Sau đó, tôi muốn mỗi mục để chuyển thành một chuỗi có giá trị cách nhau bởi một khoảng trắng, ví dụ "0.1 1.1 1.0 0.2"

+1

Bạn có thể mô tả kết quả mong đợi không? –

+1

'Nhanh nhất' có nghĩa là gì? Thời gian chạy hiệu suất (mà mục tiêu?), Ít dòng mã, mã dễ đọc nhất, vv ... – jv42

+0

Chỉ cần một cái gì đó mà làm cho tôi tránh vòng –

Trả lời

16

Tôi sẽ truy cập string.Join dễ đọc nhất mà cũng phải có hiệu suất đủ trong hầu hết các trường hợp. Trừ khi có một vấn đề thực sự, tôi sẽ không chạy của riêng tôi:

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

Nó có thể được rằng tôi hiểu sai câu hỏi của bạn, vì vậy trong trường hợp bạn muốn một đếm string đi với câu trả lời khác.

+0

Có lẽ, nó sẽ chỉ gọi 'float.ToString()' cho mỗi phần tử trong mảng – abatishchev

+0

Hãy để tôi thử nó –

+0

Không biên dịch. Nói "Tham gia" có một số đối số không hợp lệ. –

3

Bạn có thể làm điều đó như thế này:

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

Chỉnh sửa câu hỏi của tôi –

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

hoặc sử dụng 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

Để rõ ràng hơn, hãy gọi float.ToString() bằng tay và sau đó string.Join() để tách từng kết quả với một không gian:

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

btw,

trong .NET 2.0/3.0/3.5 chỉ có duy nhất String.Join(string, string[])

nhưng trong .NET 4.0 cũng có String.Join<T>(string, IEnumerable<T>)

@ 0xA3 sử dụng phương pháp từ .NET 4. 0. Của tôi cũng thế. Vì vậy, cho các phiên bản trước đó sử dụng array.Select(..).ToArray()

+1

Đây có vẻ là câu trả lời hoàn chỉnh nhất. –

-2

Tôi thích cách tiếp cận với việc sử dụng phương pháp 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()); 

trình nhanh chóng.

+0

Dude, bạn là người đàn ông, cảm ơn thực sự !!! –

+3

Sử dụng 'String.Concat' và' String.Format' chắc chắn là không hiệu quả – abatishchev

+0

@abatishchev Vì vậy, cách tốt hơn là gì? – iburlakov

Các vấn đề liên quan