2009-11-22 24 views

Trả lời

31

Không chính xác những gì bạn đang tìm kiếm, nhưng

let strings = [| "one"; "two"; "three" |] 
let r = System.String.Concat(strings) 
printfn "%s" r 

Bạn có thể làm

let strings = [ "one"; "two"; "three" ] 
let r = strings |> List.fold (+) "" 
printfn "%s" r 

hoặc

let strings = [ "one"; "two"; "three" ] 
let r = strings |> List.fold (fun r s -> r + s + "\n") "" 
printfn "%s" r 
+0

Tôi đã chọn tùy chọn gấp. Không phải là ngắn gọn nhất nhưng tôi đang cố gắng những thứ khác nhau để có được hang của ngôn ngữ ... cảm ơn – mwjackson

+1

hoặc chỉ 'Seq.fold (+)" "' cho cách thứ ba. lợi ích trên 'giảm' là bạn sẽ không nhận được một" Các chuỗi đầu vào trống rỗng "ngoại lệ nếu nó là trống –

2
System.String.Join(Environment.NewLine, List.to_array messages) 

hoặc sử dụng gấp của bạn (lưu ý rằng nó là nhiều hơn nữa hiệu quả)

List.reduce (fun a b -> a^Environment.NewLine^b) messages 
+2

Tôi chắc chắn một StringBuilder sẽ nhanh hơn một thuật toán ghép nối. – codebliss

+0

Vâng, đó là lý do tại sao tôi gọi là giải pháp thứ 2 không hiệu quả - dựa vào String.Join/concat bằng cách sử dụng StringBuilder trong nội bộ. – Dario

+0

@Dario, mục đích sử dụng^và Env.NewLine thay vì + và "\ n" là gì? – Stringer

31
> String.concat " " ["Juliet"; "is"; "awesome!"];; 
val it : string = "Juliet is awesome!" 
+0

Đây là cách để đi, lưu ý Chuỗi ở đây đề cập đến thư viện F # Core.String được nhập theo mặc định: https://msdn.microsoft.com/en-us/library/ee353761.aspx – chillitom

+2

["Juliet"; "Là"; "awesome!"] |> String.concat "" ;; –

3

Tôi muốn sử dụng String.Concat trừ khi bạn cần làm định dạng fancier và sau đó tôi muốn sử dụng StringBuilder.

(StringBuilder(), [ "one"; "two"; "three" ]) 
||> Seq.fold (fun sb str -> sb.AppendFormat("{0}\n", str)) 
1

chỉ thêm một bình luận,

khi bạn đang làm với chuỗi, bạn muốn sử dụng tốt hơn các chức năng chuỗi tiêu chuẩn.

Đoạn mã dưới đây là dành cho EulerProject vấn đề 40.

let problem40 = 
    let str = {1..1000000} |> Seq.map string |> String.concat "" 
    let l = [str.[0];str.[9];str.[99];str.[999];str.[9999];str.[99999];str.[999999];] 
    l |> List.map (fun x-> (int x) - (int '0')) |> List.fold (*) 1 

nếu dòng thứ hai của chương trình trên sử dụng gấp thay vì concat, nó sẽ là rất chậm vì mỗi lần lặp của lần tạo ra một chuỗi dài mới.

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