回答編集履歴

2

unzip

2022/02/07 08:52

投稿

xebme
xebme

スコア1083

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.head,y)
27
+ val result = (x,y)
28
28
  ```

1

2022/02/07 03:29

投稿

xebme
xebme

スコア1083

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
+ ```