回到主页

scala数组操作

排行榜相关(排序,去重,选优)的组合操作

· scala

需求目标:

  1. 查看排名。
  2. 查看本次记录的排名。

实现方式:

(1查看排名)

  1. 先从数据库中获取一定条件一定范围内的所有数据。获取的数据一般是以一条记录为一个元素的数组。接下来就是对这个数组的操作。
  2. 对该数组聚类(groupBy)。
  3. 把聚类展开按一定顺序排序后获取该聚类里的第一个元素,然后形成一个新的数组。(这里就实现了去重,并且按需求或者需要的一个元素,同时还是通过该聚类的长度获取这个聚类的元素个数。)例如: (groupBy(_.peid).map(_._2).map(i => (i.sortBy(j =>(-j.anRight, j.anLong)).head)))
  4. 根据上一步操作这里已经获取去重过的数组。再进行一个排序,通过序号的方式可以知道每一个元素的位置。即排名。例如: (resList.zipWithIndex.filter(_._1.peid == peid).head)
  5. 注意点:
    1. 对需要多个数字元素降排序时,只需在元素面前增加 “-”号。
    2. 增加的需要是从零开始,所以正常的排名需要+1。

(2.查看本次记录的排名)

  1. 查看本次记录的排名在于抽取的数据中需要事先剔除掉本人的记录,确保排名只是本次记录的排名。所以对数组的处理中需要加入剔除条件。例如:(res.toList.filter(_.peid != peid))
  2. 后面其他操作和上面类似,聚合选优,即去除多余或者重复的。
  3. 之后本次记录当做一个元素添加到去重得到的数组中,形成一个新的数组。例如:( groupQuery.toList ++ List(red),或 groupQuery.toList :+ red )
  4. 对这个数组排序,后增加序号,与上面同理可得该序号+1就是本次记录的排名。