elixir 列表排序的例子

在 elixir 里,我有个列表,大概是这样:

  [
    %{id: 1, retweet_count: 10, favorite_count: 20},
    %{id: 2, retweet_count: 20, favorite_count: 1},
    %{id: 3, retweet_count: 15, favorite_count: 50},
  ]
现在想按 retweet_count 与 favorite_count 的总数降序排列。

在 JavaScript 里,这非常简单:

  list.sort(function (a, b) {
    if (a.retweet_count + a.favorite_count > b.retweet_count + b.favorite_count) {
      return -1
    } else if (a.retweet_count + a.favorite_count < b.retweet_count + b.favorite_count) {
      return 1
    }
    return 0
  })
Elixir 有个类似的方法 sort_by:

sort(enumerable, fun)

于是我们的降序排列规则写成如下:

 Enum.sort [
    %{id: 1, retweet_count: 10, favorite_count: 20},
    %{id: 2, retweet_count: 20, favorite_count: 1},
    %{id: 3, retweet_count: 15, favorite_count: 50},
  ], &(Map.get(&1, :retweet_count) + Map.get(&1, :favorite_count) >= Map.get(&2, :retweet_count) + Map.get(&2, :favorite_count))

时间: 2024-11-01 09:23:53

elixir 列表排序的例子的相关文章

并发集合(四)用优先级对使用阻塞线程安全的列表排序

用优先级对使用阻塞线程安全的列表排序 一个典型的需求是,当你需要使用一个有序列表的数据结构时,Java提供的PriorityBlockingQueue类就拥有这种功能. 你想要添加到PriorityBlockingQueue中的所有元素必须实现Comparable接口.这个接口有一个compareTo()方法,它接收同样类型的对象,你有两个比较的对象:一个是执行这个方法的对象,另一个是作为参数接收的对象.如果本地对象小于参数,则该方法返回小于0的数值.如果本地对象大于参数,则该方法返回大于0的数

《Python Cookbook(第3版)中文版》——1.13 通过公共键对字典列表排序

1.13 通过公共键对字典列表排序 1.13.1 问题 我们有一个字典列表,想根据一个或多个字典中的值来对列表排序. 1.13.2 解决方案 利用operator模块中的itemgetter函数对这类结构进行排序是非常简单的.假设通过查询数据库表项获取网站上的成员列表,我们得到了如下的数据结构: rows = [ {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David', 'lname': 'Beazley', 'u

Python对列表排序的方法实例分析

  本文实例讲述了Python对列表排序的方法.分享给大家供大家参考.具体分析如下: 1.sort()函数 sort()函数使用固定的排序算法对列表排序.sort()函数对列表排序时改变了原来的列表,从而让其中的元素能按一定的顺序排列,而不是简单的返回一个已排序的列表副本. 注意sort()函数改变原来的列表,函数返回值是空值即None.因此,如果需要一个已排好序的列表副本,同时又要保留原有列表不变的时候,就不能直接简单的使用sort()函数.为了实现上述功能使用sort()的方法是:先获取列表

商品列表排序方式的思考

这里的商品列表不包含站内搜索结果列表,商品搜索结果的排序和内容呈现,请参考我的另一文章:B2C站内搜索初探–排序和内容呈现. 传统零售中,货架的陈列对销量的影响巨大.如何合理的分配有限的空间,通过促销品吸引顾客.从而促进最大利润产品的销售.清理滞销品和库存货,显得尤其重要.网上零售虽然理论上没有货架和空间的限制,但商品的展示机会从来都是不公平和不平等的. 有人总结b2c商品销量是二八法则,20%的商品贡献了80%的销量,但很多网站可能更加极端,10%以下的商品贡献了90%的销量.导致这种结果的原

《Python数据科学指南》——1.22 列表排序

1.22 列表排序 我们先讨论列表排序,然后扩展到对其他可迭代对象的排序. 1.22.1 准备工作 排序有两种方法,第1种是使用列表里内置的sort函数.第2种是使用sorted函数.我们通过示例来进行说明. 1.22.2 操作方法 我们来看看如何使用sort和sorted函数. # 先看一小段代码,对给定的列表进行排序 a = [8, 0, 3, 4, 5, 2, 9, 6, 7, 1] b = [8, 0, 3, 4, 5, 2, 9, 6, 7, 1] print a a.sort() p

利用jQuery对无序列表排序的简单方法_jquery

利用jQuery对无序列表排序的原理是:获取到无序列表中的所有列表项,并转成数组形式,使用JavaScript函数对其进行排序后再次输出.其中使用到的jQuery函数有ready().get().text().each().append()和JavaScript函数sort(). 1.jQuery函数介绍 (1)jQuery函数get()--获取匹配元素集合 该函数取得所有匹配元素的一种向后兼容的方式(不同于jQuery对象,实际上是元素数组).其语法形式如下: object.get() 注:如

Python对两个有序列表进行合并和排序的例子_python

假设有2个有序列表l1.l2,如何效率比较高的将2个list合并并保持有序状态,这里默认排序是正序. 思路是比较简单的,无非是依次比较l1和l2头部第一个元素,将比较小的放在一个新的列表中,以此类推,直到所有的元素都被放到新的列表中. 考虑2个列表l1 = [2], l2 = [1],如何将他们合并呢?(注意:下面实现会改变l1和l2本来的值) 复制代码 代码如下: def signle_merge_sort(l1, l2):    tmp = []    if l1[0] < l2[0]:  

Java编程技巧:列表排序

在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList.这些集合提供了对对象组的索引访问.他们提供了元素的添加与删除支持.然而,它们并没有内置的元素排序支持. 你能够使用java.util.Collections类中的sort()方法对List元素进行排序.你既可以给方法传递一个List对象,也可以传递一个List和一个Comparator.如果列表中的元素全都是相同类型的类,并且这个类实现了Comparable接口,你可

Asp.net实现向上向下排序的例子

  工作中一些常用到的代码记录下来,方便自己查找也方便其他需要人士参考. 废话不多说,这是一个向上向下排序的功能,首先使用存储过程 整好 如下: SQL: -- ============================================= -- Author: -- Create date: -- Description: -- ============================================= ALTER PROCEDURE [dbo].[sp_Banne