scala Iterable # map 대 Iterable # flatMap
의 map
와 flatMap
기능의 차이점은 Iterable
무엇입니까?
다음은 꽤 좋은 설명입니다.
http://www.codecommit.com/blog/scala/scala-collections-for-the-easily-bored-part-2
목록을 예로 사용 :
지도의 서명은 다음과 가변합니다.
map [B](f : (A) => B) : List[B]
그리고 flatMap은
flatMap [B](f : (A) => Iterable[B]) : List[B]
따라서 flatMap은 유형 [A]를 사용하고 반복 가능한 유형 [B]를 반환하고 map은 유형 [A]를 사용하여 유형 [B]를 반환합니다.
이것은 또한 플랫 맵이 목록을 "평탄화"아이디어를 제공합니다.
val l = List(List(1,2,3), List(2,3,4))
println(l.map(_.toString)) // changes type from list to string
// prints List(List(1, 2, 3), List(2, 3, 4))
println(l.flatMap(x => x)) // "changes" type list to iterable
// prints List(1, 2, 3, 2, 3, 4)
위는 모든 사실이지만, 편리 한 가지 더있다 : flatMap
권수 List[Option[A]]
로를 List[A]
어떤으로, Option
훈련 에까지 그 None
제거합니다. 이 .NET을 사용하는 것이 중요한 개념적 돌파구입니다
null
.
에서 scaladoc :
- 지도
이 iterable의 각 요소에 지정된 함수 f를 적용한 결과의 iterable을 리턴합니다.
- flatMap
이 반복 가능한 각 요소에 주어진 함수 f를 적용한 다음 결과를 연결합니다.
lines.map(line => line split "\\W+") // will return a list of arrays of words
lines.flatMap(line => line split "\\W+") // will return a list of words
이해를 위해 더 잘 볼 수 있습니다.
for {line <- lines
word <- line split "\\W+"}
yield word.length
이것은 다음과 같이 번역됩니다.
lines.flatMap(line => line.split("\\W+").map(word => word.length))
for 내부의 각 반복기는 "flatMap"으로 변환됩니다. 단, 마지막 반복자는 "map"으로 변환됩니다. 이렇게하면 중첩 된 컬렉션 (blah, blah, blah의 버퍼 배열 목록)을 반환하는 대신 플랫 컬렉션을 반환합니다. 양보되는 요소에 의해 다수의 컬렉션-이 경우에는 정수 목록입니다.
여기를보세요 : http://www.codecommit.com/blog/scala/scala-collections-for-the-easily-bored-part-2
"flatMap 검색"-거기에 대한 정말 좋은 설명이 있습니다. (기본적으로 다른 언어의 기능인 "플랫 튼"과 "맵"의 조합입니다.)
참고 URL : https://stackoverflow.com/questions/1059776/scala-iterablemap-vs-iterableflatmap
'ProgramingTip' 카테고리의 다른 글
Docker Compose 파일에서 $ 달러 기호를 어떻게 이스케이프 할 수 있습니까? (0) | 2020.12.11 |
---|---|
쉘 펼쳐 비교에서 x $ VAR = xyes를 자주 사용하는 이유는 무엇입니까? (0) | 2020.12.11 |
IIS7의 클래식 ASP : 500 내부 서버 오류에서 브라우저로 오류 전송 거부 (0) | 2020.12.11 |
동작 (0) | 2020.12.11 |
C #에서 줄 계속 문자 (0) | 2020.12.11 |