F# 我如何编写一个函数,它接受一个序列,并返回同一个序列,并且映射只应用于一个元素?
假设我有序列F# 我如何编写一个函数,它接受一个序列,并返回同一个序列,并且映射只应用于一个元素?,f#,F#,假设我有序列{1;2;3;4},我想对第三个元素应用(funx->x*2),产生{1;2;6;4}。构建这样一个函数的最佳方法是什么?一个简单的方法是这样做,同时仍然将seq视为一个流: let input = seq {1..4} let result = input |> Seq.mapi (fun i x -> match i with | 2 (* 3rd item *) -> x*
{1;2;3;4}
,我想对第三个元素应用(funx->x*2)
,产生{1;2;6;4}
。构建这样一个函数的最佳方法是什么?一个简单的方法是这样做,同时仍然将seq
视为一个流:
let input = seq {1..4}
let result = input |> Seq.mapi (fun i x -> match i with
| 2 (* 3rd item *) -> x*2
| _ -> x)
这样做的一个简单方法是,在适当地将
seq
视为流的同时:
let input = seq {1..4}
let result = input |> Seq.mapi (fun i x -> match i with
| 2 (* 3rd item *) -> x*2
| _ -> x)
Seq.mapi,元素的位置作为额外输入;只需相应地改变你的双重乐趣。这将对序列中的每个元素应用映射,这似乎效率低下。没有更好的方法可以做到这一点吗?序列没有索引,因此您只能迭代到至少要更改的元素。为什么您认为这是低效的?是否必须是
seq
类型,或者如果您正在编写性能敏感代码,则必须是一个数组?seq.mapi,其中元素的位置作为额外输入;只需相应地改变你的双重乐趣。这将对序列中的每个元素应用映射,这似乎效率低下。没有更好的方法可以做到这一点吗?序列没有索引,因此您必须迭代至少要更改的元素。为什么您认为它效率低下?是否必须是seq
类型,或者如果您正在编写性能敏感的代码,则必须是数组?