scala中的遍历列表并将所有第一个元素和第二个元素分组

时间:2017-04-02 18:04:32

标签: scala list

这可能是非常简单的问题。我有一个名为“List1”的列表,其中包含整数对列表,如下所示。

  

List1 = List((1,2),(3,4),(9,8),(9,10))

输出应为:

  

r1 =(1,3,9,9)//列表(( 1 ,2),( 3 ,4),( 9 < / strong>,8),( 9 ,10))
    r2 =(2,4,8,10)//列表((1, 2 ),(3, 4 ),(9, 8 ),(9, 10 ))

array r1(Array[int]) should contains set of all first integers of each pair in the list.
array r2(Array[int]) should contains set of all second integers of each pair  

2 个答案:

答案 0 :(得分:3)

只需使用unzip

scala> List((1,2), (3,4), (9,8), (9,10)).unzip
res0: (List[Int], List[Int]) = (List(1, 3, 9, 9),List(2, 4, 8, 10))

答案 1 :(得分:1)

使用foldLeft

val (alist, blist) = list1.foldLeft((List.empty[Int], List.empty[Int])) { (r, c) => (r._1 ++ List(c._1), r._2 ++ List(c._2))}

Scala REPL

scala> val list1 = List((1, 2), (3, 4), (5, 6))
list1: List[(Int, Int)] = List((1,2), (3,4), (5,6))

scala> val (alist, blist) = list1.foldLeft((List.empty[Int], List.empty[Int])) { (r, c) => (r._1 ++ List(c._1), r._2 ++ List(c._2))}
alist: List[Int] = List(1, 3, 5)
blist: List[Int] = List(2, 4, 6)