bug*_*oot 3 .net f# max minimum unchecked
Unchecked.defaultof<'T>
为任何类型生成默认值.是否存在这样的通用函数来为具有最大/最小值的类型有意义的任何类型生成最大/最小值?
编辑
回答John Palmer关于我认为它有用的问题:我想创建以下函数的"可变"版本:
let InternalArrDiffMax (s : 'T []) (diff : 'T -> 'T -> 'C) =
s
|> Array.mapi (fun i e ->
[| for j in i + 1 .. s.Length - 1 -> diff e s.[j] |]
|> Array.maxBy (fun n -> n))
|> Array.maxBy (fun e -> e)
Run Code Online (Sandbox Code Playgroud)
由于我不能在没有为其赋值的情况下声明可变变量,我认为还有其他方法可以做到:
let InternalArrDiffMax (s : 'T []) (diffFun : 'T -> 'T -> 'C) =
let mutable max : 'C = // Generic max of 'C if it makes sense
for i in 0 .. s.Length - 1 do
for j in i + 1 .. s.Length - 1 do
let diff = diffFun s.[i] s.[j]
if (i = 0 && j = 1) || max < diff then
max <- diff
max
Run Code Online (Sandbox Code Playgroud)
这就是为什么我认为我需要一个通用的最大值.
@kaefer的答案为您提供了一个获得最大/最小值的好方法,但对于您的特定用例,我建议您'C option
改为使用可变变量,并将其初始化为None
.这种方式不需要魔法数字.
let InternalArrDiffMax (s : 'T []) (diffFun : 'T -> 'T -> 'C) =
let mutable max : 'C option = None
for i in 0 .. s.Length - 1 do
for j in i + 1 .. s.Length - 1 do
let diff = diffFun s.[i] s.[j]
match max with
| None ->
max <- Some diff
| Some v when v < diff ->
max <- Some diff
| _ -> ()
max
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
907 次 |
最近记录: |