gpt4 book ai didi

f# - 从控制台读取字符串而不使用 for 循环

转载 作者:行者123 更新时间:2023-12-02 11:57:56 24 4
gpt4 key购买 nike

是否有任何优雅的功能方式可以从控制台输入读取 N 个字符串? F# for fun and profit建议避免 for 循环,所以我使用了递归,但它看起来又丑又长。

代码说明:我需要从控制台读取几个字符串(确切的数字在控制台输入的第一行中指定),将它们连接起来并转换为整数数组。

let rec recReadline n =
match n with
| 0 -> ""
| _ -> let x = n - 1
" " + Console.ReadLine() + recReadline x

let getArrayOfIntFromConsole =
let x = Console.ReadLine() |> int |> recReadline
let trimmedString = x.Trim()
let numArray = trimmedString.Split ' ' |> Array.map(int)
numArray

我正在学习 f#,抱歉提出了菜鸟问题。

更新1

谢谢各位的回复!这是来自黑客等级的任务:https://www.hackerrank.com/challenges/diagonal-difference 。起初,我决定将输入和算法逻辑分开并创建了这篇文章。我没有足够清楚地描述问题的上下文,建议使用 Array.Init。它对我没有帮助,因为输入字符串由许多用空格分隔的整数组成。我用 Array.Init 将一个回复标记为正确答案,因为它是我糟糕的问题的正确答案。

我决定在一个函数中读取控制台和计算,它对我来说工作正常。我的最终代码:

open System

let rec recDiagDif recCounter primaryDiagSum secondDiagSum =
match recCounter with
| 0 -> primaryDiagSum - secondDiagSum |> abs
| _ -> let arrayInt = Console.ReadLine().Split ' ' |> Array.map(int)
recDiagDif (recCounter-1)
(primaryDiagSum + arrayInt.[arrayInt.Length - recCounter])
(secondDiagSum + arrayInt.[recCounter-1])

[<EntryPoint>]
let main argv =
let matrixSize = Console.ReadLine() |> int
printf "%A" (recDiagDif matrixSize 0 0)
0

如果您知道如何改进代码,请随时发表评论。

最佳答案

我倾向于建议将控制台输入保留为某种集合,而不是转换为平面字符串,然后在空白处再次拆分。

let readNLines n =  Array.init n (fun _ -> Console.ReadLine())

let getArrayOfIntFromConsole() =
let lines = Console.ReadLine() |> int |> readNLines
let numArray = lines |> Array.map(int)
numArray

关于f# - 从控制台读取字符串而不使用 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37910107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com