2011-01-21 31 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

相关问题