【发布时间】:2011-01-05 11:26:33
【问题描述】:
(我知道this question,但它与序列有关,这不是我的问题)
给定这个输入(例如):
let testlist =
[
"*text1";
"*text2";
"text3";
"text4";
"*text5";
"*text6";
"*text7"
]
let pred (s:string) = s.StartsWith("*")
我希望能够调用 MyFunc pred testlist 并获得以下输出:
[
["*text1";"*text2"];
["*text5";"*text6";"*text7"]
]
这是我目前的解决方案,但我不太喜欢嵌套的 List.revs(忽略它需要 Seq 作为输入的事实)
let shunt pred sq =
let shunter (prevpick, acc) (pick, a) =
match pick, prevpick with
| (true, true) -> (true, (a :: (List.hd acc)) :: (List.tl acc))
| (false, _) -> (false, acc)
| (true, _) -> (true, [a] :: acc)
sq
|> Seq.map (fun a -> (pred a, a))
|> Seq.fold shunter (false, [])
|> snd
|> List.map List.rev
|> List.rev
【问题讨论】:
-
迟来的后记:这个问题的标题措辞不好,所以一些答案更适合this问题。
标签: f#