gpt4 book ai didi

f# - 需要有关将 C# 转换为 F# 的帮助

转载 作者:行者123 更新时间:2023-12-02 22:15:38 27 4
gpt4 key购买 nike

我需要帮助将 IndexOfAny 的自定义扩展翻译为字符串,因为现有框架没有与字符串值匹配的 IndexOfAny。已经翻译了我自己的。但是我不知道如何通过返回值跳出循环。任何想法如何打破循环或更好的解决方案。以下是我的翻译。

C#

public static int IndexOfAnyCSharp(this string str, string[] anyOff) {
if (str != null && anyOff != null)
foreach (string value in anyOff) {
int index = str.IndexOf(value);
if (index > -1) return index;
}
return -1;
}

F#

[<Extension>]
static member public IndexOfAnyFSharp(str:string, anyOff:string[]) =
match str <> null && anyOff <> null with
| true ->
let mutable index = -1
for value in anyOff do
if index = -1 then
index <- str.IndexOf(value)
index
| false -> -1

最佳答案

Seq.tryFind 是你的 friend 。基本构建 block 类似于

let IndexOfAny (s: string, manyStrings: string seq) = 
manyStrings
|> Seq.map (fun m -> s.IndexOf m)
|> Seq.tryFind (fun index -> index >= 0)

如果没有匹配,这将返回 None - 这比返回 -1 更符合 F# 习惯:编译器将迫使您考虑没有匹配的情况。

更新:您可能更喜欢:

let IndexOfAny (s: string, manyStrings: string seq) = 
manyStrings
|> Seq.tryPick (fun m ->
match s.IndexOf m with
| -1 -> None
| i -> Some i
)

关于f# - 需要有关将 C# 转换为 F# 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45859495/

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