给定一串数字,我想要一个元组序列,将非零字符与它们在字符串中的位置进行映射。例子:
IN: "000140201"
OUT: { (3, '1'); (4, '4'); (6, '2'); (8, '1') }
解决方案:
let tuples = source
|> Seq.mapi (fun i -> fun c -> (i, c))
|> Seq.filter (snd >> (<>) '0')
对于这样一个简单且可能很常见的操作,似乎(fun i -> fun c -> (i, c))
输入的内容比应有的要多得多。声明必要的函数很容易:
let makeTuple a b = (a, b)
let tuples2 = source
|> Seq.mapi makeTuple
|> Seq.filter (snd >> (<>) '0')
但在我看来,如果库提供了snd
函数,它也应该提供makeTuple
函数(并且可能使用更短的名称),或者至少它应该相对容易编写。我找不到它;我错过了什么吗?我尝试使用框架的 Tuple.Create 构建一些东西,但除了单参数重载之外,我不知道如何获得任何东西。