函数不仅可以查找序列的minium值,还可以查找F#中的索引

Ter*_*wis 1 f# list idiomatic

我有一个序列,我需要找到序列的最小值,以及序列中的值索引 - 实际上是Seq.mapi或Seq.iteri行中的某种"Seq.mini"函数.

在F#中表达这种最干净/最惯用的方式是什么?

在惯用法上,我是否应该期望编写一个返回元组(值,索引)或(索引,值)的函数,如果有的话,是否存在这些值应出现在哪个顺序的约定?

另一件事:如果有多个元素具有相同的最小值,我需要第一次出现的索引 - 我想这会转化为严格的"小于(<)"比较,而不是"小于或等于"( <=)" - 对吗?

Lar*_*ars 5

这是一个简单的清洁解决方案:

let mini s = s |> Seq.mapi (fun i x -> (i, x)) |> Seq.minBy snd
let index, value = seq [3;6;1;5;1] |> mini
Run Code Online (Sandbox Code Playgroud)