2011-01-21 55 views
3

lists模塊提供了一個函數來查找列表的最大值,lists:max(List)Erlang列表:找到最大定義的元素

有沒有像lists:maxfun(Fun, List)這樣的功能?給定的樂趣應該用於所有元素,maxfun應該給這個元素而不是值。例如:

Fun gets [X,Y] and calcs X+Y 
lists:maxfun(Fun,[[1,1],[1,2]]} -> [1,2]. 

回答

4

可以使用例如這一招:如果你使用的第一個元素

1> F=fun([X,Y]) -> X+Y end.         
#Fun<erl_eval.6.13229925> 
2> element(2, lists:max([ {F(X), X} || X <- [[1,1],[1,2]]])). 
[1,2] 
1

你可以用列表:與foldl吧,這樣的事情:

lists:foldl(fun([X1,Y1],[X2,Y2]) when X1 + Y1 > X2 + Y2 -> 
       [X1,Y1]; 
       (_, Acc) -> 
       Acc 
      end, [0,0], ListOfLists). 
+3

的名單作爲初始累加器,那麼你將始終有一個很好的初始值。 – rvirding 2011-01-22 00:36:39

相關問題