gpt4 book ai didi

f# - 列表的最小/最大和最频繁的元素

转载 作者:行者123 更新时间:2023-12-04 14:57:08 26 4
gpt4 key购买 nike

我必须编写一个程序,在输出中给出一个元组:非空列表的最小值和最大值以及最常出现的值。
特别是:

min_max [1;0;-1;2;0;-4] ==> (-4; 2)
min_max: int list -> (int * int)

mode [-1;2;1;2;5;-1;5;5;2] ==> 2
mode: int list -> int

这是我为 max (min 几乎相等) 编写的代码,但是我该如何接收具有两个值的元组作为输出?
let rec max_list xs =
match xs with
| [] -> failwith "xs" "Empty list"
| [x] -> x
| x1::x2::xs' -> max_list((max2 x1 x2)::xs');;

最佳答案

我会采纳 @Mark Seemann 的第一个建议的答案并使用它运行,以使其通用,适用于任何集合类型,并明智地处理空集合的情况。

let tryMinMax xs =
Seq.fold (function
| Some(mn, mx) -> fun i -> Some(min mn i, max mx i)
| None -> fun i -> Some(i, i) ) None xs

[1;0;-1;2;0;-4]
|> tryMinMax
// val it : (int * int) option = Some (-4, 2)

对于问题中最常见的部分:
let mostFrequent xs =
xs
|> Seq.countBy id
|> Seq.maxBy snd
|> fst

[1;0;-1;2;0;-4]
|> mostFrequent
// val it : int = 0

关于f# - 列表的最小/最大和最频繁的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33529942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com