gpt4 book ai didi

f# - F#中的列表扁平化

转载 作者:行者123 更新时间:2023-12-03 19:05:11 24 4
gpt4 key购买 nike

我是 F# 的新手,并试图在 F# 中重写我们的一个应用程序,以便在此过程中尝试学习它,但在展平列表时遇到了一些麻烦。我已经搜索并找到了几个答案,但我似乎无法让它们中的任何一个起作用。

我的数据类型是 val regEntries: RegistryKey list list

我希望它只是一个列表。

下面是我的代码:

namespace DataModule

module RegistryModule =
open Microsoft.Win32

let regEntries =
["SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"; "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"]
|> List.map (fun x -> Microsoft.Win32.Registry.LocalMachine.OpenSubKey(x))
|> List.map(fun k -> List.ofArray(k.GetSubKeyNames()) |> List.map (fun x -> k.OpenSubKey(x)) |> List.filter (fun x -> x.GetValue("ProductId") <> null))

最佳答案

尝试以下

let regEntries = 
["SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"; "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"]
|> Seq.map (fun x -> Microsoft.Win32.Registry.LocalMachine.OpenSubKey(x))
|> Seq.map(fun k ->
(k.GetSubKeyNames())
|> Seq.map (fun x -> k.OpenSubKey(x))
|> Seq.filter (fun x -> x.GetValue("ProductId") <> null)))
|> Seq.concat
|> List.ofSeq
Seq.concat方法对于转换 T list list 很有用到 T list .注意我换了很多你的 List.调用 Seq.调用。似乎没有必要创建一个实际的 list直到最后,因此我将其保留为一个简单的 seq

关于f# - F#中的列表扁平化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21052114/

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