了解Scala中的地图

时间:2017-07-07 20:09:10

标签: scala

请帮助我了解地图(_(0))的含义:

scala> a.collect
res97: Array[org.apache.spark.sql.Row] = Array([1039], [1010], [1002], [926])

scala> a.collect.map(_(0))
res98: Array[Any] = Array(1039, 1010, 1002, 926)

2 个答案:

答案 0 :(得分:1)

<强> 1。函数式编程中的.map将您想要的函数应用于集合的每个元素。

说,您想要为您拥有的数组中的每个元素添加一些数据,这可以按照以下方式完成,

scala> val data = Array("a", "b", "c")
data: Array[String] = Array(a, b, c)

scala> data.map(element => element+"-add something")
res10: Array[String] = Array(a-add something, b-add something, c-add something)

我要说的是,在每个元素add something上,element是不必要的,因为无论如何你都要添加every element。因此,_代表任何元素

因此,可以通过以下方式完成相同的地图。

scala> data.map(_+"-add something")
res9: Array[String] = Array(a-add something, b-add something, c-add something)

另外,请注意,如果您有一个行映射函数,则使用_

<强> 2。 collection(index)是访问集合中第n个元素的方法。

例如

scala> val collection = Array(Vector(1039), Vector(1010), Vector(1002), Vector(926))
collection: Array[scala.collection.immutable.Vector[Int]] = Array(Vector(1039), Vector(1010), Vector(1002), Vector(926))

scala> collection(0)
res13: scala.collection.immutable.Vector[Int] = Vector(1039)

因此,结合#1和#2,在您的情况下,您将映射原始集合并获取第一个元素。

scala> collection.map(_.head)
res17: Array[Int] = Array(1039, 1010, 1002, 926)

参考文献

https://twitter.github.io/scala_school/collections.html#map

Map, Map and flatMap in Scala

答案 1 :(得分:0)

您正在访问集合a中项目的第0个元素。在处理集合中的项目时,_是Scala中的常见占位符。

更具体地说,您的代码等同于

a.collect.map(item => item(0))