반응형
Option [X]의 Scala 컬렉션을 X의 컬렉션으로 변환하는 방법
저는 Scala를 탐구하기 시작했습니다. 제가 흥미를 느끼는 것 중 하나는 관련 오류 Option를 제거 할 수 있는 유형과 약속입니다 null.
그러나 나는 목록 (또는 다른 컬렉션) Option[String]을 String(분명히 모든 값을 필터링 하는) 컬렉션 으로 변환하는 방법을 알아낼 수 없었습니다 None.
즉, 어떻게 얻을 수 있습니까?
List[Option[Int]] = List(Some(1))
... 이에:
List[Int] = List(1)
답변에 영향을 미치는 경우 Scala 2.8을 사용하고 있습니다.
val list1 = List(Some(1), None, Some(2))
val list2 = list1.flatten // will be: List(1,2)
교육 목적으로 다음과 같은 몇 가지 대안을 좋아할 수 있습니다.
scala> val list1 = List(Some(1), None, Some(2))
list1: List[Option[Int]] = List(Some(1), None, Some(2))
scala> list1 flatten
res0: List[Int] = List(1, 2)
// Expanded to show the implicit parameter
scala> list1.flatten(Option.option2Iterable)
res1: List[Int] = List(1, 2)
scala> list1 flatMap (x => x)
res2: List[Int] = List(1, 2)
scala> list1 flatMap Option.option2Iterable
res3: List[Int] = List(1, 2)
// collect is a simultaneous map + filter
scala> list1 collect { case Some(x) => x }
res4: List[Int] = List(1, 2)
Scalaz를 사용하면를 sequence반환 하는 약간 다른 작업을 수행 할 수 있습니다 Option[List[Int]].
scala> import scalaz._; import Scalaz._
import scalaz._
import Scalaz._
scala> val list1: List[Option[Int]] = List(Some(1), None, Some(2))
list1: List[Option[Int]] = List(Some(1), None, Some(2))
scala> list1.sequence
res1: Option[List[Int]] = None
scala> val list2: List[Option[Int]] = List(Some(1), Some(2))
list2: List[Option[Int]] = List(Some(1), Some(2))
scala> list2.sequence
res2: Option[List[Int]] = Some(List(1, 2))
반응형
'Program Club' 카테고리의 다른 글
| 자바 스크립트 : 숫자의 x % 계산 (0) | 2020.10.20 |
|---|---|
| Grand Central Dispatch에서 dispatch_sync 사용 (0) | 2020.10.20 |
| 배열의 Ruby 출력 내용을 쉼표로 구분 된 문자열 Ruby (0) | 2020.10.20 |
| Rails-정의되지 않은 메소드`stringify_keys ' (0) | 2020.10.20 |
| Asp.Net MVC : 내 URL에서 대시를 어떻게 활성화합니까? (0) | 2020.10.20 |