【发布时间】:2018-07-29 21:49:29
【问题描述】:
我是 Scala 的新手,并试图了解如何处理元组列表,因此我创建了一个虚构的人员列表:
val fichier : List[(String, Int)] = List(("Emma Jacobs",21), ("Mabelle Bradley",53), ("Mable Burton",47), ("Ronnie Walton",41), ("Bill Morton",36), ("Georgia Bates",30), ("Jesse Caldwell",46), ("Jeffery Wolfe",50), ("Roy Norris",18), ("Ella Gonzalez",48))
我想把这个列表分成两个列表(不管partition和filter等专用方法)根据一定的条件(例如一边是偶数,另一边是奇数)和将这两个列表放在一起。类似List[evenList, oddList]
用 Python 编写代码很容易,但在 Scala 中显然不行:
Python code:
def separate(list):
evenList = [] ; oddList = []
for (i, j) in list:
if j%2==0:
evenList.append((i,j))
else:
oddList.append((i,j))
bothLists = [evenList, oddList]
return bothLists
结果(为便于阅读而更改):
[
[('Bill Morton', 36), ('Georgia Bates', 30), ('Jesse Caldwell', 46), ('Jeffery Wolfe', 50), ('Roy Norris', 18), ('Ella Gonzalez', 48)],
[('Emma Jacobs', 21), ('Mabelle Bradley', 53), ('Mable Burton', 47), ('Ronnie Walton', 41)]
]
我也以这种方式对其进行了编码,以展示两个短列表如何从一个迭代演变为另一个:
Python code:
def separate(list):
evenList = [] ; oddList = []
for (i, j) in list:
if j%2==0:
evenList.append((i,j))
yield evenList
else:
oddList.append((i,j))
yield oddList
结果:
[('Emma Jacobs', 21)]
[('Emma Jacobs', 21), ('Mabelle Bradley', 53)]
[('Emma Jacobs', 21), ('Mabelle Bradley', 53), ('Mable Burton', 47)]
[('Emma Jacobs', 21), ('Mabelle Bradley', 53), ('Mable Burton', 47), ('Ronnie Walton', 41)]
[('Bill Morton', 36)]
[('Bill Morton', 36), ('Georgia Bates', 30)]
[('Bill Morton', 36), ('Georgia Bates', 30), ('Jesse Caldwell', 46)]
[('Bill Morton', 36), ('Georgia Bates', 30), ('Jesse Caldwell', 46), ('Jeffery Wolfe', 50)]
[('Bill Morton', 36), ('Georgia Bates', 30), ('Jesse Caldwell', 46), ('Jeffery Wolfe', 50), ('Roy Norris', 18)]
[('Bill Morton', 36), ('Georgia Bates', 30), ('Jesse Caldwell', 46), ('Jeffery Wolfe', 50), ('Roy Norris', 18), ('Ella Gonzalez', 48)]
在下面找到我用 Scala 编写的代码:
Scala code:
def separate(list: List[(String, Int)]): List[List[(String, Int)]] = {
val evenList = List[(String, Int)]()
val oddList = List[(String, Int)]()
for ( (i, j) <- list if j%2==0 ) (i,j)::evenList
for ( (i, j) <- list if j%2!=0 ) (i,j)::oddList
val evenAndodd = List(evenList,oddList)
evenAndodd
}
结果:
scala> separate(fichier)
res16: List[List[(String, Int)]] = List(List(), List())
evenList 和 oddList 在 evenAndodd 列表中为空。
我想我明白了,但我不知道英文单词。它是关于 Scala 中变量的“可达性”。
欢迎任何帮助
【问题讨论】: