You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

F#数组处理:将输入数组转换为Seq of Seqs序列

Got it,我来帮你搞定这个F#的需求,咱们一步步拆解实现:

完整实现代码

module SOQN = 
    open System 
    let first = [| "C"; "D"; "C"; "E"; "B"; "A"; "A"; "E"; "A"; "B"; "A"; "D"; "B"; "E" |] 
    let second = [| "No"; "No"; "Yes"; "Yes"; "Yes"; "No"; "Yes"; "No"; "Yes"; "Yes"; "Yes"; "Yes"; "Yes"; "No" |] 
    let fltr = [| "No"; "Yes" |] 

    let filterProduct (firstArr:string[]) (secondArr:string[]) (filterTags:string[]) =
        // 1. 把前两个数组对齐成你要的元组数组格式
        let pairedItems = Array.zip firstArr secondArr
        
        // 2. 按第一个数组的类别分组,把同类别项归拢到一起
        pairedItems
        |> Seq.groupBy fst
        |> Seq.map (fun (category, categoryGroup) ->
            // 3. 遍历过滤标签,统计每个标签在当前类别里的出现次数
            filterTags
            |> Seq.map (fun tag ->
                let tagCount = categoryGroup |> Seq.filter (fun (_, t) -> t = tag) |> Seq.length
                (category, (tag, tagCount))
            )
        )

    // 调用函数生成目标序列
    let finalResult = filterProduct first second fltr

代码逻辑拆解

  1. 对齐数组:用Array.zip直接将first和second配对成[|("C", "No"); ("C", "Yes"); ...|]的元组数组,这一步完全符合你要的初始格式。
  2. 按类别分组:通过Seq.groupBy fst把配对后的元素按类别(比如"C"、"D")分组,这样同一类别下的所有标签项都被聚在一起,方便后续统计。
  3. 统计过滤标签次数:对每个类别分组,遍历fltr里的标签,筛选出对应标签的项并统计数量,最后把类别和(标签,计数)组合成元组,每个类别对应的这些元组就构成一个子序列,最终形成seq of seqs的结构。

输出结果示例

运行后finalResult的结构如下,完全匹配你的需求:

seq [
  seq [("A", ("No", 1)); ("A", ("Yes", 3))];
  seq [("B", ("No", 0)); ("B", ("Yes", 3))];
  seq [("C", ("No", 1)); ("C", ("Yes", 1))];
  seq [("D", ("No", 1)); ("D", ("Yes", 1))];
  seq [("E", ("No", 2)); ("E", ("Yes", 1))]
]

如果你希望每个子序列是单个包含类别+所有标签计数的三元组(比如你给出的seq [("C", ("No", 1), ("Yes", 1))]格式),可以修改map内的逻辑为:

Seq.singleton (
    category, 
    ("No", categoryGroup |> Seq.filter (fun (_, t) -> t = "No") |> Seq.length),
    ("Yes", categoryGroup |> Seq.filter (fun (_, t) -> t = "Yes") |> Seq.length)
)

这种写法适配固定两个过滤标签的场景,输出的子序列就是单个三元组的形式。

内容的提问来源于stack exchange,提问作者matekus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:05:39