回答編集履歴
2
unzip
test
CHANGED
@@ -23,6 +23,6 @@
|
|
23
23
|
Seq[(X,Y)] => (Seq[X],Seq[Y])
|
24
24
|
```
|
25
25
|
```Scala
|
26
|
-
val (x,y) = list.map{ case(DuplicateData(a,b)) => (a,b) }.unzip
|
26
|
+
val ((x::xs),y) = list.map{ case(DuplicateData(a,b)) => (a,b) }.unzip
|
27
|
-
val result = (x
|
27
|
+
val result = (x,y)
|
28
28
|
```
|
1
test
CHANGED
@@ -6,8 +6,23 @@
|
|
6
6
|
differentVal: Diff
|
7
7
|
)
|
8
8
|
```
|
9
|
+
|
10
|
+
**foldLeft /foldRight**
|
11
|
+
|
9
12
|
タプルを得るだけならfoldLeft /foldRightのどちらでも良さそうです。
|
10
13
|
```Scala
|
11
14
|
list.foldRight((0, Seq():Seq[Diff])){ case(d,t) => (d.sameId, d.differentVal +: t._2) }
|
12
15
|
list.foldLeft((0, Seq():Seq[Diff])){ case((_, b), DuplicateData(x,y)) => (x, b :+ y) }
|
13
16
|
```
|
17
|
+
|
18
|
+
**unzip(追記)**
|
19
|
+
|
20
|
+
DuplicateDataは入れ物に過ぎないので、DuplicateData[X,Y]と考えられます。すると次のような`unzip`の利用が思い浮かびます。
|
21
|
+
```Scala
|
22
|
+
DuplicateData[X,Y] => (X,Y)
|
23
|
+
Seq[(X,Y)] => (Seq[X],Seq[Y])
|
24
|
+
```
|
25
|
+
```Scala
|
26
|
+
val (x,y) = list.map{ case(DuplicateData(a,b)) => (a,b) }.unzip
|
27
|
+
val result = (x.head,y)
|
28
|
+
```
|