Scala - 即使初始列表已排序,groupBy / map之后的最终映射也未排序

时间:2016-08-23 12:55:48

标签: scala

这是一个非常简单的代码,也可以在Scala工作表中执行。这是一种减少计算列表中数字频率的方法。

我在启动groupBy和map操作之前对列表进行排序。即使这样,list.groupBy.map操作也会生成一个未排序的地图。既不是数字也不是频率

event.preventDefault();
                var fdata = new FormData()


                if($("#upload_logo")[0].files.length>0)
                   fdata.append("upload_logo",$("#upload_logo")[0].files[0])

                $.ajax({
                    type: 'POST',
                    url: 'step-two.php',
                    data:{fdata},

2 个答案:

答案 0 :(得分:1)

groupBy不保证任何订单

答案 1 :(得分:0)

val list = List(1,2,4,2,4,7,3,2,4).sorted    
val freqMap = list.groupBy(x => x)

输出:

freqMap: scala.collection.immutable.Map[Int,List[Int]] = Map(1 -> List(1), 2 -> List(2, 2, 2), 7 -> List(7), 3 -> List(3), 4 -> List(4, 4, 4))

groupBy获取列表并对元素进行分组。它构建了一个Map中的

  • key是列表的唯一值
  • value是列表中所有匹配项的列表。

以下是Scala文档中的官方方法定义:

def groupBy [K] (f: (A) ⇒ K): Map[K, Traversable[A]] 

如果您想订购分组结果,可以使用ListMap:

scala> val freqMap = list.groupBy(x => x)
freqMap: scala.collection.immutable.Map[Int,List[Int]] = Map(1 -> List(1), 2 -> List(2, 2, 2), 7 -> List(7), 3 -> List(3), 4 -> List(4, 4, 4))

scala> import scala.collection.immutable.ListMap
import scala.collection.immutable.ListMap

scala> ListMap(freqMap.toSeq.sortBy(_._1):_*)
res0: scala.collection.immutable.ListMap[Int,List[Int]] = Map(1 -> List(1), 2 -> List(2, 2, 2), 3 -> List(3), 4 -> List(4, 4, 4), 7 -> List(7))