list - scala:从列表生成元组

标签 list scala functional-programming

我有一个列表 val l=List(4,3,2,1) ,我正在尝试生成格式为 (4,3), (4,2) 的元组列表等等。

这是我目前所拥有的:

for (i1<-0 to l.length-1;i2<-i1+1 to l.length-1) yield (l(i1),l(i2))

输出是:Vector((4,3), (4,2), (4,1), (3,2), (3,1), (2,1))

两个问题:

  1. 它生成一个 Vector , 不是 List .这两个有什么不同?

  2. 这是idiomatic scala吗?这样做的方式?我是 Scala 的新手,所以正确学习对我来说很重要。

最佳答案

在问题的第一部分,for comprehension 实现将范围 0 到 l.length-1i1+1 到 l.length-1 定义为 IndexedSeq[Int] 因此产生的类型是特征 IndexedSeq[(Int, Int)] 由最终类 Vector 实现。

在第二部分,您的方法是有效的,但请考虑以下我们不使用列表索引引用的地方,

for (List(a,b,_*) <- xs.combinations(2).toList) yield (a,b)

注意

xs.combinations(2).toList
List(List(4, 3), List(4, 2), List(4, 1), List(3, 2), List(3, 1), List(2, 1))

因此对于 List(a,b,_*) 我们进行模式匹配并提取每个嵌套列表的前两个元素(_* 表示忽略可能的附加元素)。由于迭代是在一个列表上进行的,因此 for 理解会产生一个双元组列表。

关于list - scala:从列表生成元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32001729/

相关文章:

c# - 修改C#中的LinkedListNode属性

scala - 使用 `aggregate` 合并 map

functional-programming - 您可以用宏做什么不能用过程完成的事情?

Swift 4.0 在类型内部实现自定义运算符作为类型方法与在全局范围内实现自定义运算符作为全局函数之间的区别

javascript - 使用 JavaScript 进行功能分配?

c# - ASP.Net XUnit 检查对象列表是否包含特定对象

java - 列表中的日历类型元素

Python:从列表转换为字符串

scala - 如何在 Scala 宏中创建类或对象?

scala - 带有多个参数列表的方法的 “missing argument list” -error消息中有违反直觉的建议吗?