首页 > 解决方案 > F#:创建一个包含所有列表头部的列表,在列表中

问题描述

我正在尝试创建一个函数,该函数采用列表中所有列表的头部([[]])。到目前为止,我已经找到了如何获取列表中所有列表的所有第一个整数,但我似乎无法将其放入同一函数中的列表中。

let isTable (llst : list<list<'a>>) : bool =
    List.forall (fun (elem : list<'a>) -> not elem.IsEmpty && elem.Length = elem.Length) llst


let a = [[1;2;3];[4;5;6]]
printfn "%A" (isTable a)     

List.iter (fun x -> printfn "%A " (List.head x)) a

有人可以在这里帮忙吗?

标签: listfunctionf#nested-lists

解决方案


您可以使用List.mapList.head您已经找到的应用到每个列表。

let a = [[1;2;3];[4;5;6]]
let collectHeads l = List.map List.head l
printfn "%A" (collectHeads a)  // [1,4]

List.head,不同的是,List.map它是一个高阶函数,需要一个函数作为参数。预期的函数应该采用列表类型的一个元素并返回另一个元素。碰巧就是这样List.head做的:它将一个列表作为输入并返回它的头部作为结果元素。


推荐阅读