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

如何实现支持空格分隔符的F#字符串列表分组函数?

问题:按指定分隔符分组字符串列表

需求说明

给定字符串列表(示例:["abceadfapaq"; "asdqwedasca"; " "; "asdasqyhgahfgasdsadasda"])和字符串分隔符(如" "),需返回按分隔符拆分的子列表组成的列表(示例:[["abceadfapaq"; "asdqwedasca"]; ["asdasqyhgahfgasdsadasda"]])。

现有实现及问题

失效函数

该函数处理非空格分隔符时正常,但处理空格分隔符时输出不符合预期:

let groupWithNoReplace (inputLines: string list) (separator: string) =
        let complete = 
            seq {
                for line in inputLines do
                    yield! line.Split(' ')
            } |> List.ofSeq
        let folder (a) (cur, acc) = 
            match a with
            | _ when a <> separator -> a::cur, acc
            | _ -> [], cur::acc 
        let result = List.foldBack folder (complete) ([], [])
        (fst result)::(snd result)

// 测试案例及结果
let groupWithNoReplace0 = 
    groupWithNoReplace ["abceadfapaq"; "asdqwedasca"; " "; "asdasqyhgahfgasdsadasda"] " "

val groupWithNoReplace0: string list list =
  [["abceadfapaq"; "asdqwedasca"; ""; ""; "asdasqyhgahfgasdsadasda"]]

let groupWithNoReplace00 = 
    groupWithNoReplace ["abceadfapaq"; "asdqwedasca"; "="; "asdasqyhgahfgasdsadasda"] "="

val groupWithNoReplace00: string list list =
  [["abceadfapaq"; "asdqwedasca"]; ["asdasqyhgahfgasdsadasda"]]

问题核心:当输入行是空格字符串" "时,用Split(' ')会拆分成两个空字符串"",导致最终结果混入无效空元素。

替换实现的有效函数

通过将空格替换为特殊符号"§"实现功能,但要求输入不能包含该符号,存在明显局限性:

let groupWithNoReplace (inputLines: string list) (separator: string) =
        let validlines = inputLines |> List.map(fun e -> if e = " " then "§" else e)
        let validsplitter =
            match separator = " " with
            | true -> "§"
            | false -> separator
        let complete = 
            seq {
                for line in validlines do
                    yield! line.Split(' ')
            } |> List.ofSeq
        let folder (a) (cur, acc) = 
            match a with
            | _ when a <> validsplitter -> a::cur, acc
            | _ -> [], cur::acc
                
        let result = List.foldBack folder (complete) ([], [])
        (fst result)::(snd result)

// 测试案例及结果
let groupWithNoReplace1 = 
    groupWithNoReplace 
["abceadfapaq"; "asdqwedasca"; " "; "asdasqyhgahfgasdsadasda"] " "

val groupWithNoReplace1: string list list =
  [["abceadfapaq"; "asdqwedasca"]; ["asdasqyhgahfgasdsadasda"]]

let groupWithNoReplace11 = 
    groupWithNoReplace ["abceadfapaq"; "asdqwedasca"; "="; "asdasqyhgahfgasdsadasda"] "="

val groupWithNoReplace11: string list list =
  [["abceadfapaq"; "asdqwedasca"]; ["asdasqyhgahfgasdsadasda"]]

寻求最优方案

需要一种无需依赖输入内容限制的实现,避免使用可能与输入冲突的特殊符号,同时准确完成按指定分隔符分组的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:05:24