ProgramingTip

scala Iterable # map 대 Iterable # flatMap

bestdevel 2020. 12. 11. 19:14
반응형

scala Iterable # map 대 Iterable # flatMap


mapflatMap기능의 차이점은 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

반응형