如何遍历并访问F#中List<List<string>>的内部元素?
正确访问F#嵌套集合元素的方法
首先你代码里有两个核心问题需要修正:
1. 修正初始集合的定义
你写的["a","aData"]是二元元组(类型string * string),不是列表;而且外层列表用逗号分隔元素,会让ftss变成包含单个二元元组的列表,完全不是你想要的嵌套结构。
如果你需要的是「列表嵌套列表」:
用分号分隔列表元素,正确定义如下:
let ftss = [ ["a"; "aData"]; ["b"; "bData"] ]
如果你需要的是「包含二元元组的列表」(更适合固定两个元素的场景):
同样用分号分隔外层列表的元素,元组保留逗号:
let ftss = [ ("a", "aData"); ("b", "bData") ]
2. 正确遍历访问元素
场景一:嵌套列表的访问
F#的列表是链表结构,不推荐用索引访问(效率低),更适合用嵌套的List.iter遍历:
// 遍历外层列表,再遍历每个内部列表的元素 List.iter (fun innerList -> List.iter (fun elem -> printfn "%s" elem) innerList) ftss
如果一定要用索引访问,需要用List.item函数(F#没有item[i]这种语法):
List.iter (fun innerList -> for i in 0 .. innerList.Length - 1 do printfn "%s" (List.item i innerList)) ftss
场景二:元组列表的访问
因为元组是固定长度的,直接用模式匹配解构最简洁:
// 直接解构出每个元组的两个元素 List.iter (fun (key, data) -> printfn "Key: %s, Data: %s" key data) ftss
内容的提问来源于stack exchange,提问作者Michael Gabbay
相关产品推荐
相关产品推荐

