map函数如何在scala中进行排序
下面的代码片段map函数如何在scala中进行排序,scala,collections,Scala,Collections,下面的代码片段 val keys=List(3,2,1,0) val unsorted=List(1, 2, 3, 4) val sorted =keys map unsorted 根据键进行排序 通常,map方法获取lambda并将其应用于源中的每个元素。相反,上面的代码获取一个列表并基于索引进行排序 在这种特殊情况下会发生什么?列表是一个从索引到值的局部函数。你可以这样看: scala> List(3,2,1,0) map (i => List(1,2,3,4)(i)) res
val keys=List(3,2,1,0)
val unsorted=List(1, 2, 3, 4)
val sorted =keys map unsorted
根据键进行排序
通常,map方法获取lambda并将其应用于源中的每个元素。相反,上面的代码获取一个列表并基于索引进行排序
在这种特殊情况下会发生什么?列表是一个从索引到值的局部函数。你可以这样看:
scala> List(3,2,1,0) map (i => List(1,2,3,4)(i))
res0: List[Int] = List(4, 3, 2, 1)
核实
scala> val f: Int => Int = List(1, 2, 3, 4)
f: Int => Int = List(1, 2, 3, 4)
在键映射未排序
中,对于键
中的每个值,我们调用列表未排序
中的应用
方法,该方法在键
位置生成元素
交换键中的元素
并记下结果,例如记下最后一个键
val keys=List(2,1,0,3)
val sorted = keys map unsorted
sorted: List[Int] = List(3, 2, 1, 4)
它不会对它们进行排序,map
使用一个函数,让我们看看:
这句话的意思是:
keys.map(unsorted.apply)
Scala的List.apply(n:Int)
函数返回n
List的第个元素,在本例中map
使其:
unsorted(3), unsorted(2), unsorted(1), unsorted(4)
那是
4,3,2,1
,在这种情况下,它只是偶然排序
测试这一点:
scala> val keys = List(3,0,1,2)
keys: List[Int] = List(3, 0, 1, 2)
scala> val unsorted = List(10,20,30,40)
unsorted: List[Int] = List(10, 20, 30, 40)
scala> keys map unsorted
res0: List[Int] = List(40, 10, 20, 30)
函数.map
与排序没有特定关系
你的狙击手是一个特殊的情况,碰巧排序。如果脱胶,则按如下操作
/* keys */List(3,2,1,0).map { i: Int =>
unsorted.apply(i)
}
它适用于键的每个值(用作索引)。它根本不排序。这是正常情况:map方法获取lambda并将其应用于源中的每个元素。只要更改您的排序的列表,您就会看到它。它会按索引对列表重新排序,这与排序不同吗?将列表传递给lambda调用如何应用方法?我不会将其称为重新排序,如果您使用列表(0,0,0,0,0)
作为键,您将得到列表(10,10,10)
或列表(5,5,5)
您将获得java.lang.IndexOutOfBoundsException:5
或者如果您给出List(0)
它将返回List(10)
,而不是我们可以说的orderin,它返回与给定索引对应的元素,对于您的另一个问题,如果您将对象传递给map,scala将默认使用apply,这使得创建像案例类这样的对象的实例成为可能easy@hariharan:List[T]
是函数[Int,T]
的一个子类。