2012-09-20 53 views
1
if reelID = reelWeights.Count - 1 
    then Array.fold calc1 (0L,0) reelWeights.[reelID] 
    else Array.fold calc2 (0L,0) reelWeights.[reelID] 

我试过用管道,它似乎慢下来一点点(不知道为什么):有什么办法可以简化这条线吗?

reelWeights.[reelID] 
    |> (if reelID = reelWeights.Count - 1 then Array.fold calc1 else Array.fold calc2) (0L,0) 

,如果我做

let calc x = if x then calc1 else calc2 
Array.fold (calc reelID = reelWeights.Count - 1) (0L,0) reelWeights.[reelID] 

那么它看起来不错,在冗余成本检查循环中的条件。

+1

第一种方法速度快,可读性强。你想如何简化它? – pad

+0

@pad嗯,我认为可能有更好的方法,这样我就不必输入两次相同的参数。如果事实证明这是一个愚蠢的问题,我会尽快删除它。 – colinfang

+1

无论如何,像这样的问题更适合[CodeReview.SE](http://codereview.stackexchange.com/)。 – ildjarn

回答

5

假设calc1calc2具有相同的签名(或如果他们的值,而不是功能,是相同的类型):

let calc = if reelID = reelWeights.Count - 1 then calc1 else calc2 
Array.fold calc (0L, 0) reelWeights.[reelID] 
+0

它没有被称为没有功能! – nicolas

1

或者在一行:

let weight = 
    Array.fold (if reelID = (reelWeights.Count - 1) then calc1 else calc2) (0L,0) reelWeights.[reelID] 
相关问题