Erlang,列表:查找具有由 fun 定义的最大值的元素

发布于 2024-10-13 05:58:27 字数 257 浏览 2 评论 0原文

lists 模块提供了一个查找列表最大值的函数,lists:max(List)

有没有像lists:maxfun(Fun, List)这样的函数?给定的 fun 应该用于所有元素,并且 maxfun 应该返回该元素而不是值。例如:

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

The lists module provides a function to find the maximum of a list, lists:max(List).

Is there a function like lists:maxfun(Fun, List)? The given fun should be used for all Elements and maxfun should give this Element back instead of the value. For example:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

就像说晚安 2024-10-20 05:58:27

例如,您可以使用以下技巧:

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]

You can use for example this trick:

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]
木有鱼丸 2024-10-20 05:58:27

您可以使用lists:foldl,如下所示:

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

You could use lists:foldl for it, something like this:

lists:foldl(fun([X1,Y1],[X2,Y2]) when X1 + Y1 > X2 + Y2 ->
                [X1,Y1];
               (_, Acc) ->
                 Acc
            end, [0,0], ListOfLists).
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文