Scala:创建一个新列表,其中每个元素都是使用不同后缀重复的旧列表的元素

时间:2014-11-25 13:18:14

标签: scala

这看起来应该很容易,但我不能把它放在一起。我想获取一个字符串列表并创建一个新列表,其中包含第一个列表中每个元素的两个但具有不同的后缀。所以:

List("a", "b", "c") -> List("a_x", "a_y", "b_x", "b_y", "c_x", "c_y"

我试过

val list2 = list1.map(i=> i+"_x", i+"_y")
但是斯卡拉说我的论点太多了。这很接近:

 val list2 = list1.map(i=> (i+"_x", i+"_y")) 

但它产生了List((" a_x"," a_y"),(" b_x"," b_y"),(& #34; c_x"," c_y"))这不是我想要的。我确信我错过了一些明显的东西。

2 个答案:

答案 0 :(得分:6)

您希望flatMap首先映射,然后将结果的结构展平为平面列表。每个单独的结果本身必须是一个集合(而不是元组):

scala> List("a", "b", "c").flatMap(i => List(i + "-x", i + "-y"))
res0: List[String] = List(a-x, a-y, b-x, b-y, c-x, c-y)

答案 1 :(得分:6)

理解:

scala> val prefixes = List("a", "b", "c")
prefixes: List[String] = List(a, b, c)

scala> val suffixes = List("x", "y")
suffixes: List[String] = List(x, y)

scala> for (prefix <- prefixes; suffix <- suffixes) yield prefix + "_" + suffix
res1: List[String] = List(a_x, a_y, b_x, b_y, c_x, c_y)

这基本上只是Seth Tisue回答的语法糖。