scala是一种匹配和映射Iterable的简洁方法

scala是一种匹配和映射Iterable的简洁方法,scala,apache-spark,Scala,Apache Spark,我仍在学习使用Scala/Spark编写代码,我遇到了一个问题,非常感谢您的帮助 我有一个带钥匙和双人床的旅行箱 Iterable[Key]是5个可能键的子集,例如: population age gender height weight 双精度是相应的读数 我的问题是,我想用以下平面格式表示我的数据: (Double,Double,Double,Double,Double) 对应于特定顺序的按键读数: (population,age,gender,height,weight) 但是在不

我仍在学习使用Scala/Spark编写代码,我遇到了一个问题,非常感谢您的帮助

我有一个带钥匙和双人床的旅行箱

Iterable[Key]是5个可能键的子集,例如:

population
age
gender
height
weight
双精度是相应的读数

我的问题是,我想用以下平面格式表示我的数据:

(Double,Double,Double,Double,Double) 
对应于特定顺序的按键读数:

(population,age,gender,height,weight)
但是在不存在键的Iterable中,我仍然需要用0填充它。例如:

Iterable((population,10),(age,21),(gender,0))
我希望能够将其表示为

(10,21,0,0,0) //the last 2 zeros are padded because there is no key matching height and weight.
到目前为止,我一直在对每个键进行单独的匹配(如果存在,则复制双精度键,如果不使用零填充),但我想知道是否有一种简洁的方法可以做到这一点


谢谢

我个人,我想创建一个
地图
。因此,假设您已经获得了您的
Iterable

val values = Seq(("population", 10), ("age", 21), ("gender", 0)).toIterable
将其转换为地图:

val keyValueMap = values.toMap
从中提取值时,只需使用
getOrElse
函数:

keyValueMap.getOrElse("height", defaultHeight)

就我个人而言,我会创建一个
地图
。因此,假设您已经获得了您的
Iterable

val values = Seq(("population", 10), ("age", 21), ("gender", 0)).toIterable
将其转换为地图:

val keyValueMap = values.toMap
从中提取值时,只需使用
getOrElse
函数:

keyValueMap.getOrElse("height", defaultHeight)

我要做的是首先定义元素的顺序

val keyOrder=List(“人口”、“年龄”、“性别”、“身高”、“体重”)

接下来,你可以做一些事情,比如

val valMap = Map("population" -> 199D, "gender" -> 1D, "weight" -> 50D)

keyOrder.map(k => valMap.getOrElse(k, 0D))

我要做的是首先定义元素的顺序

val keyOrder=List(“人口”、“年龄”、“性别”、“身高”、“体重”)

接下来,你可以做一些事情,比如

val valMap = Map("population" -> 199D, "gender" -> 1D, "weight" -> 50D)

keyOrder.map(k => valMap.getOrElse(k, 0D))

酷,这比我当前的方法更简洁。酷,这比我当前的方法更简洁。酷,这也很简洁,你介意向我解释一下D在做什么吗?D确保整数值被解释为double酷,这也很简洁,你介意向我解释一下D在做什么吗?D确保整数值被解释为双精度