zoukankan      html  css  js  c++  java
  • scala sortBy and sortWith

    sortBy: sortBy[B](f: (A) ⇒ B)(implicit ord: math.Ordering[B]): List[A] 按照应用函数f之后产生的元素进行排序

    sorted: sorted[B >: A](implicit ord: math.Ordering[B]): List[A] 按照元素自身进行排序

    sortWith: sortWith(lt: (A, A) ⇒ Boolean): List[A] 使用自定义的比较函数进行排序,比较函数boolean

    用法

    <code class="hljs coffeescript has-numbering">val nums = List(<span class="hljs-number">1</span>,<span class="hljs-number">3</span>,<span class="hljs-number">2</span>,<span class="hljs-number">4</span>)
    val sorted = nums.sorted  <span class="hljs-regexp">//</span>List(<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>)
    
    val users = List((<span class="hljs-string">"HomeWay"</span>,<span class="hljs-number">25</span>),(<span class="hljs-string">"XSDYM"</span>,<span class="hljs-number">23</span>))
    val sortedByAge = users.sortBy{<span class="hljs-reserved">case</span><span class="hljs-function"><span class="hljs-params">(user,age)</span> =></span> age}  <span class="hljs-regexp">//</span>List((<span class="hljs-string">"XSDYM"</span>,<span class="hljs-number">23</span>),(<span class="hljs-string">"HomeWay"</span>,<span class="hljs-number">25</span>))
    val sortedWith = users.sortWith{<span class="hljs-reserved">case</span><span class="hljs-function"><span class="hljs-params">(user1,user2)</span> =></span> user1._2 < user2._2} <span class="hljs-regexp">//</span>List((<span class="hljs-string">"XSDYM"</span>,<span class="hljs-number">23</span>),(<span class="hljs-string">"HomeWay"</span>,<span class="hljs-number">25</span>))</code>
    

    How to sort a Scala Map by key or value (sortBy, sortWith)

    This is an excerpt from the Scala Cookbook (partially modified for the internet). This is Recipe 11.23, “How to Sort an Existing Map by Key or Value”

    Problem

    You have an unsorted map and want to sort the elements in the map by the key or value.

    Solution

    Given a basic, immutable Map:

    scala> val grades = Map("Kim" -> 90,
         |     "Al" -> 85,
         |     "Melissa" -> 95,
         |     "Emily" -> 91,
         |     "Hannah" -> 92
         | )
    grades: scala.collection.immutable.Map[String,Int] = Map(Hannah -> 92, Melissa -> 95, Kim -> 90, Emily -> 91, Al -> 85)

    You can sort the map by key, from low to high, using sortBy:

    scala> import scala.collection.immutable.ListMap
    import scala.collection.immutable.ListMap
    
    scala> ListMap(grades.toSeq.sortBy(_._1):_*)
    res0: scala.collection.immutable.ListMap[String,Int] = Map(Al -> 85, Emily -> 91, Hannah -> 92, Kim -> 90, Melissa -> 95)

    You can also sort the keys in ascending or descending order using sortWith:

    // low to high
    scala> ListMap(grades.toSeq.sortWith(_._1 < _._1):_*)
    res0: scala.collection.immutable.ListMap[String,Int] = Map(Al -> 85, Emily -> 91, Hannah -> 92, Kim -> 90, Melissa -> 95)
    
    // high to low
    scala> ListMap(grades.toSeq.sortWith(_._1 > _._1):_*)
    res1: scala.collection.immutable.ListMap[String,Int] = Map(Melissa -> 95, Kim -> 90, Hannah -> 92, Emily -> 91, Al -> 85)

    You can sort the map by value using sortBy:

    scala> ListMap(grades.toSeq.sortBy(_._2):_*)
    res0: scala.collection.immutable.ListMap[String,Int] = Map(Al -> 85, Kim -> 90, Emily -> 91, Hannah -> 92, Melissa -> 95)

    You can also sort by value in ascending or descending order using sortWith:

    // low to high
    scala> ListMap(grades.toSeq.sortWith(_._2 < _._2):_*)
    res0: scala.collection.immutable.ListMap[String,Int] = Map(Al -> 85, Kim -> 90, Emily -> 91, Hannah -> 92, Melissa -> 95)
    
    // high to low
    scala> ListMap(grades.toSeq.sortWith(_._2 > _._2):_*)
    res1: scala.collection.immutable.ListMap[String,Int] = Map(Melissa -> 95, Hannah -> 92, Emily -> 91, Kim -> 90, Al -> 85)

    In all of these examples, you’re not sorting the existing map; the sort methods result in a new sorted map, so the output of the result needs to be assigned to a new variable.

    Also, you can use either a ListMap or a LinkedHashMap in these recipes. This example shows how to use a LinkedHashMap and assign the result to a new variable:

    scala> val x = collection.mutable.LinkedHashMap(grades.toSeq.sortBy(_._1):_*)
    x: scala.collection.mutable.LinkedHashMap[String,Int] =
        Map(Al -> 85, Emily -> 91, Hannah -> 92, Kim -> 90, Melissa -> 95)
    
    scala> x.foreach(println)
    (Al,85)
    (Emily,91)
    (Hannah,92)
    (Kim,90)
    (Melissa,95)

    转:https://blog.csdn.net/mengxing87/article/details/51636080

    有关 sortWith 底层,请看这里:https://www.cnblogs.com/nucdy/p/9270594.html


  • 相关阅读:
    无法删除文件提示找不到指定文件导致文件无法删除的解决方法
    c++多线程编程(三)
    c++多线程编程(二)
    c++多线程编程(一)
    面试中的C++常见问题
    展示组件(Presentational component)和容器组件(Container component)之间有何不同
    如果你创建了类似于下面的 Twitter 元素,那么它相关的类定义是啥样子的?
    React 中 refs 的作用是什么?
    typescript 类(类的定义、继承、修饰符、抽象类)
    typescript 接口 interface
  • 原文地址:https://www.cnblogs.com/nucdy/p/9271904.html
Copyright © 2011-2022 走看看