我有一个List[List[(Char,Int)]]。假设它是
List(List(('a',10), ('b',12)))我想要做的是连接一些元素到它,但它们也应该是从一个列表。让我说得更清楚一点:
我有一份清单:
List(List(('a',9),('a',8) ... ('a',1))) 对于这个列表,我想要做的是将每个元素(立即让我想到地图)添加到我的原始列表中,但作为一个不同的列表。我不确定这是否有意义,所以让我以直观的方式向你们展示我想要的是什么:
// The original list should look something like this
List(List(('a',10),('b',12)), List('a',9), List('a',8) ... List('a',1))到目前为止,我没有返回正确的结果,因为它将整个列表转换为列表本身,而不是每个元素都转换为列表。以下是我到目前为止所拥有的:
//This is hard coded.
List(List(('a',10) , ('b',12))) ::: List((for(c <- 1 to 10) yield ('a',c)).toList)这将返回以下内容:
List(List(('a',10),('b',12)), List( ('a',10), ('a',9 )... ('a', 1)))我的心被你在红宝石里的方式所困扰(每句话都是这样)。
你能给我指出一个正确的功能,我应该能够使用这样的东西吗?有什么更简单的方法来做这样的事情吗?
发布于 2014-06-12 19:01:49
val l1 = List(List(('a',10), ('b',12)))
val l2 = List(List(('a',9),('a',8),('a',1)))
val concat = l1 ::: l2.flatMap(x=>x.map(y=>List(y)))添加到l2中的每个l1元素都封装在自己的列表中。
如何思考“功能”:通过每次应用一个函数,找出将我们的输入转换为输出的步骤:
您可以想到的是一个嵌套的映射:
l2.map(internalList => internalList.map(element => List(element)))
res10: List[List[List[(Char, Int)]]] = List(List(List((a,9)), List((a,8)), List((a,1))))但正如你所看到的,这将使外部结构就位。要打破“分组屏蔽”,您可以使用flatMap而不是map,有效地扁平容器结构,并释放内部的List(elem)元素。
l2.flatMap(internalList => internalList.map(element => List(element)))
res11: List[List[(Char, Int)]] = List(List((a,9)), List((a,8)), List((a,1)))这是匹配第一个列表的类型,因此一个简单的列表连接将两者结合在一起:
l1 ::: l2.flatMap(internalList => internalList.map(element => List(element)))
res12: List[List[(Char, Int)]] = List(List((a,10), (b,12)), List((a,9)), List((a,8)), List((a,1)))发布于 2014-06-12 19:27:22
对于这个列表,我想要做的是将每个元素(立即让我想到地图)添加到我的原始列表中,但作为一个不同的列表。
据我所知:
val l1 = List(List(('a',10), ('b',12)))
val l2 = List(List(('a',9), ('a',8), ('a',1)), List(('b',12)))
val result = l1 ::: List(l2.flatten)
res3: List[List[(Char, Int)]] = List(List((a,10), (b,12)), List((a,9), (a,8), (a,1), (b,12)))https://stackoverflow.com/questions/24190154
复制相似问题