2017-05-01 24 views
1

私はF#で配列を有する:複製リストの項目をn回

let n = 2 

let seq1 = { 
    yield "a" 
    yield "b" 
    yield "c" 
} 

を私は順序n回ですべての項目を印刷したいです。私は、このようにそれを行うことができます。これの

let printx line t = 
    for i = 1 to t do 
     printfn "%s" line 

seq1 |> Seq.iter (fun i -> printx i n) 

出力は次のとおりです。


B
B
C
C

私はこれが最善の解決策ではないと思います。シーケンス内のアイテムを複製する方法は?

答えて

5

あなたは、入力シーケンスの各要素を複製する機能を作成することができます。

let replicateAll n s = s |> Seq.collect (fun e -> Seq.init n (fun _ -> e)) 

その後、

seq1 |> replicateAll 2 |> Seq.iter (printfn "%s") 
4

を複製する機能は、実際にあります:

let xs = [1; 2; 3; 4; 5] 
xs |> List.collect (fun x -> List.replicate 3 x) 
//val it : int list = [1; 1; 1; 2; 2; 2; 3; 3; 3; 4; 4; 4; 5; 5; 5] 

そして、あなたをすることができますラムダを取り除く関数の構成を行う:

let repCol n xs = (List.replicate >> List.collect) n xs 
+0

これもシーケンス用に機能しますか? F#4.xの –

+0

、はい。 – s952163

3

私はむしろシーケンス計算式を使用します。
ルックスクリーナー:

let replicateAll n xs = seq { 
    for x in xs do 
    for _ in 1..n do 
     yield x 
} 
+0

ありがとうございました! –

関連する問題