首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将给定列表中的每个元素作为单独的列表连接到另一个列表。

将给定列表中的每个元素作为单独的列表连接到另一个列表。
EN

Stack Overflow用户
提问于 2014-06-12 17:09:35
回答 2查看 71关注 0票数 0

我有一个List[List[(Char,Int)]]。假设它是

代码语言:javascript
运行
复制
List(List(('a',10), ('b',12)))

我想要做的是连接一些元素到它,但它们也应该是从一个列表。让我说得更清楚一点:

我有一份清单:

代码语言:javascript
运行
复制
List(List(('a',9),('a',8) ... ('a',1)))  

对于这个列表,我想要做的是将每个元素(立即让我想到地图)添加到我的原始列表中,但作为一个不同的列表。我不确定这是否有意义,所以让我以直观的方式向你们展示我想要的是什么:

代码语言:javascript
运行
复制
// The original list should look something like this
List(List(('a',10),('b',12)), List('a',9), List('a',8) ... List('a',1))

到目前为止,我没有返回正确的结果,因为它将整个列表转换为列表本身,而不是每个元素都转换为列表。以下是我到目前为止所拥有的:

代码语言:javascript
运行
复制
//This is hard coded. 
List(List(('a',10) , ('b',12))) :::  List((for(c <- 1 to 10) yield ('a',c)).toList)

这将返回以下内容:

代码语言:javascript
运行
复制
List(List(('a',10),('b',12)), List( ('a',10), ('a',9 )... ('a', 1)))

我的心被你在红宝石里的方式所困扰(每句话都是这样)。

你能给我指出一个正确的功能,我应该能够使用这样的东西吗?有什么更简单的方法来做这样的事情吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-12 19:01:49

代码语言:javascript
运行
复制
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元素都封装在自己的列表中。

如何思考“功能”:通过每次应用一个函数,找出将我们的输入转换为输出的步骤:

  • l1是好的,所以我们就保持原样
  • l2:最简单的方法是“进入”第一个列表结构,并将每个二级元素转换为一个列表封装元素。

您可以想到的是一个嵌套的映射:

代码语言:javascript
运行
复制
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)元素。

代码语言:javascript
运行
复制
l2.flatMap(internalList => internalList.map(element => List(element)))
res11: List[List[(Char, Int)]] = List(List((a,9)), List((a,8)), List((a,1)))

这是匹配第一个列表的类型,因此一个简单的列表连接将两者结合在一起:

代码语言:javascript
运行
复制
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)))
票数 2
EN

Stack Overflow用户

发布于 2014-06-12 19:27:22

对于这个列表,我想要做的是将每个元素(立即让我想到地图)添加到我的原始列表中,但作为一个不同的列表。

据我所知:

代码语言:javascript
运行
复制
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)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24190154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档