Próbuję tego w tej chwili, ale nie całkiem mam podpis metody wypracowany ... ktoś? wiadomości jest dziedziną seq [ciąg]Jak połączyć listę ciągów w F #?
let messageString = List.reduce(messages, fun (m1, m2) -> m1 + m2 + Environment.NewLine)
Próbuję tego w tej chwili, ale nie całkiem mam podpis metody wypracowany ... ktoś? wiadomości jest dziedziną seq [ciąg]Jak połączyć listę ciągów w F #?
let messageString = List.reduce(messages, fun (m1, m2) -> m1 + m2 + Environment.NewLine)
Nie dokładnie to, czego szukasz, ale
let strings = [| "one"; "two"; "three" |]
let r = System.String.Concat(strings)
printfn "%s" r
Można zrobić
let strings = [ "one"; "two"; "three" ]
let r = strings |> List.fold (+) ""
printfn "%s" r
lub
let strings = [ "one"; "two"; "three" ]
let r = strings |> List.fold (fun r s -> r + s + "\n") ""
printfn "%s" r
System.String.Join(Environment.NewLine, List.to_array messages)
lub używając krotnie (należy pamiętać, że jest to o wiele bardziej nieefektywne)
List.reduce (fun a b -> a^Environment.NewLine^b) messages
Jestem pewien, że StringBuilder byłby szybszy niż algorytm konkatenacji. – codebliss
Tak, dlatego nazwałem drugie rozwiązanie nieefektywne - polegając na String.Join/concat używając wewnętrznie StringBuilder. – Dario
@Dario, jaki jest cel używania^i Env.NewLine zamiast + i "\ n"? – Stringer
> String.concat " " ["Juliet"; "is"; "awesome!"];;
val it : string = "Juliet is awesome!"
To jest sposób, aby przejść, Uwaga Ciąg tutaj odnosi się do biblioteki F # Core.String, która jest importowana domyślnie: https://msdn.microsoft.com/en-us/library/ee353761.aspx – chillitom
["Julia"; "jest"; "awesome!"] |> String.concat "" ;;; –
użyję String.concat chyba trzeba zrobić hodowcy formatowania, a następnie użyję StringBuilder.
(StringBuilder(), [ "one"; "two"; "three" ])
||> Seq.fold (fun sb str -> sb.AppendFormat("{0}\n", str))
tylko jeden komentarz,
kiedy robisz sznurkiem, lepiej użyć standardowych funkcji ciągów.
Poniższy kod jest EulerProject problemu 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
jeśli druga linia powyższego programu korzysta krotnie zamiast concat, byłoby bardzo powolne, ponieważ każda iteracja krotnie tworzy nowy długi ciąg.
Poszedłem po opcję składania. Nie najbardziej zwięzły, ale próbuję różnych rzeczy, aby opanować język ... dzięki – mwjackson
lub po prostu 'Seq.fold (+)" "' dla trzeciej drogi. korzyścią z 'zmniejszenia' jest to, że nie otrzymasz wyjątku" Sekwencja wejściowa była pusta "jeśli jest pusta –