我有一个像这样的元组列表:
let scorecard = [ for i in 0 .. 39 -> i,0 ]
Run Code Online (Sandbox Code Playgroud)
我想识别其中的第n个元组.我是这样想的:
let foundTuple = scorecard |> Seq.find(fun (x,y) -> x = 10)
Run Code Online (Sandbox Code Playgroud)
然后我想根据找到的元组创建一个新的元组:
let newTuple = (fst foundTuple, snd foundTuple + 1)
Run Code Online (Sandbox Code Playgroud)
并拥有一个包含更新值的新列表
有没有人有一些匹配这种模式的代码?我想我必须将列表拆分为2个子列表:1个列表有1个元素(我要替换的元组),另一个列表有剩余的元素.然后我创建一个新的列表,其中包含替换元组和未更改元组的列表......
您可以使用List.mapi它使用指定的投影函数创建新列表 - 但它也使用当前索引调用投影函数,因此您可以根据此索引决定要执行的操作.
例如,要增加整数列表的第二个元素,您可以执行以下操作:
let oldList = [0;0;0;0]
let newList = oldList |> List.mapi (fun index v -> if index = 1 then v + 1 else v)
Run Code Online (Sandbox Code Playgroud)
根据问题,使用Map类型而不是列表可能是有意义的 - map表示从键到值的映射,并且在仅更改单个值时不需要复制整个内容.所以,例如:
// Map keys from 0 to 3 to values 0
let m = Map.ofList [0,0;1,0;2,0;3,0]
// Set the value at index 1 to 10 and get a new map
Map.add 1 10 m
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |