Я обрабатываю большое количество объектов, размещенных в массиве. Эта обработка занимает много времени, и я хотел бы иметь возможность отслеживать, находится ли эффект на этапе обработки.
Моя цель - иметь возможность печатать на консоли что-то вроде Processing thing number *x*
, продолжая работать. Например, с этим
let x = [|1..10..100000|]
x
|> Array.mapi (fun i n -> (i, n))
|> Array.map (fun (i, n) -> printfn "Processing n %i" i, (n * 2)))
|> Array.map snd
Я получаю вывод для каждой строки. Я хотел бы, чтобы каждое 10-е, 100-е или 1000 печатало оператор, а не каждую строку. Так что я пробовал
x
|> Array.mapi (fun i n -> (i, n))
|> Array.map (fun (i, n) -> (if (i % 100 = 0) then printfn "Processing n %i" i, (n * 2)))
|> Array.map snd
но это дает ошибку над битом printfn...
с
The 'if' expression is missing an else branch. The 'then' branch has type
''a * 'b'. Because 'if' is an expression, and not a statement, add an 'else'
branch which returns a value of the same type.
По сути, я хочу, чтобы ветка else...
ничего не делала, ничего не выводила на консоль, просто игнорировалась.
Интересно, что при написании этого вопроса и попытке что-то сделать в FSI
я попробовал это:
x
|> Array.mapi (fun i n -> (i, n))
|> Array.map (fun (i, n) -> match (i % 100 = 0) with
| true -> printfn "Processing n %i" i, (n * 2)
| false -> (), n * 2)
|> Array.map snd
который, кажется, работает. Это лучший способ предоставить текст консоли?