gpt4 book ai didi

c# - 这个 C# 代码是如何用函数式语言(F#?Haskel?)完成的

转载 作者:太空狗 更新时间:2023-10-29 23:10:29 25 4
gpt4 key购买 nike

我如何用 F# 或 Haskel 或类似的函数式语言编写此 C# 代码?

var lines = File.ReadAllLines(@"\\ad1\\Users\aanodide\Desktop\APIUserGuide.txt");

// XSDs are lines 375-471
var slice = lines.Skip(374).Take(471-375+1);

var kvp = new List<KeyValuePair<string, List<string>>>();
slice.Aggregate(kvp, (seed, line) =>
{
if(line.StartsWith("https"))
kvp.Last().Value.Add(line);
else
kvp.Add(
new KeyValuePair<string,List<string>>(
line, new List<string>()
)
);
}
return kvp;
});

最佳答案

因此,如果我正确阅读了您的代码,您的输入将如下所示:

[...]
Foo
https://example1.com
https://example2.com
Bar
https://example3.com
Baz
Xyzzy
https://example4.com
[...]

由此,您希望 header 与其下方的 URL 分组。这是执行此操作的 Haskell 程序:

import Data.List (isPrefixOf)

groupUrls :: [String] -> [(String, [String])]
groupUrls [] = []
groupUrls (header:others) = (header, urls) : groupUrls remaining
where (urls, remaining) = span (isPrefixOf "https") others

main = do
input <- readFile "\\\\ad1\\\\Users\\aanodide\\Desktop\\APIUserGuide.txt"
let slice = take (471 - 375 + 1) $ drop 374 $ lines input
let kvp = groupUrls slice
print kvp

输出:

[("Foo",["https://example1.com","https://example2.com"]),("Bar", ["https://example3.com"]),("Baz",[]),("Xyzzy",["https://example4.com"])]

这里感兴趣的关键函数是span ,此处用于获取以 "https" 开头的连续行,并将它们与其余行一起返回,然后递归处理。

关于c# - 这个 C# 代码是如何用函数式语言(F#?Haskel?)完成的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6576003/

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