gpt4 book ai didi

list - 不向返回列表添加任何值

转载 作者:行者123 更新时间:2023-12-01 06:41:59 26 4
gpt4 key购买 nike

我在理解 F# 的工作原理时遇到了问题。我来自 C#,我认为我正在努力使 F# 像 C# 一样工作。我最大的问题是以正确的格式返回值。

例子:假设我有一个函数,它接受一个整数列表和一个整数。 函数应打印索引列表,其中列表中的值与传递的整数匹配。

我的代码:

let indeks myList n = myList |> List.mapi (fun i x -> if x=n then i else 0);;
indeks [0..4] 3;;

然而它返回:

val it : int list = [0; 0; 0; 3; 0]

而不仅仅是 [3],因为我不能在该声明中省略其他内容。我还针对 -> int list -> int -> int list 的签名进行了定位,然后我得到了其他东西。

同样适用于问题号。 2 我想提供一个整数并打印从 0 到这个整数的每个数字 n 次(其中 n 是迭代值):例子:乘值 3;;输出:[1;2;2;3;3;3]

我能做的就是创建列表列表。

返回元素时我错过了什么?如何在返回中不添加任何内容
示例:如果 x=n 那么 n 否则 AddNothingToTheReturn

最佳答案

使用List.choose:

let indeks lst n =
lst
|> List.mapi (fun i s -> if s = n then Some i else None)
|> List.choose id

抱歉,我没有注意到你还有第二个问题。为此,您可以使用 List.collect:

let f (n : int) : list<int> =
[1 .. n]
|> List.collect (fun s -> List.init s (fun t -> s))
printfn "%A" (f 3) // [1; 2; 2; 3; 3; 3]

请阅读the documentation for List.collect获取更多信息。

编辑

s952163 的带领下,这是第一个解决方案的另一个版本,没有 Option 类型:

let indeks (lst : list<int>) (n : int) : list<int> =
lst
|> List.fold (fun (s, t) u -> s + 1, (if u = n then (s :: t) else t)) (0, [])
|> (snd >> List.rev)

这个遍历一次原始列表,一次遍历(可能更短)新形成的列表。

关于list - 不向返回列表添加任何值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37519379/

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