如果我使用xxx.flatMap(_.split(" "))
,它會拆分陣列然後變平或將它變平然後拆分?平面地圖,平面圖或地圖首先發生哪種情況?
回答
flatmap
函數的作用是取一個返回一個列表的函數,然後將結果展平。
因此,它會映射迭代(在這種情況下分割),然後將生成的2D迭代(本例中爲List)展平。
讓我們稍微擴展一下。首先,讓我們來定義你的xxx
用的那種,我覺得你想要的例子:
val xxx = Array("hello there 馬慧超", "how are you", "nice to meet you")
現在,讓我們寫出來你的邏輯不再手:
def words(str : String) : Array[String] = str.split(" ")
xxx.flatMap(string => words(string))
我們先從一個字符串數組。在某個中間點,函數words
在每個這些立即字符串上被調用,這產生Array[String]
,因此概念上我們有一串字符串數組。
但是,我們最終得到的只是一個字符串數組,「扁平化」,因爲字數組中間序列中的每個單詞都成爲一個長數組的一部分。因此,從概念上講,首先我們執行該映射函數(words
,或者在這種情況下,更直接地split
),然後我們展開。
所以,直接回答你的問題,分裂然後扁平化。
更新(更多,「因爲爲什麼不呢?)
它甚至不清楚這將意味着什麼‘平坦’串序列,但非正式你可能首先想到串聯。我們可以很容易證明這不是儀器發生的情況。如果您嘗試
def words(str : String) : Array[String] = {println(str); str.split(" ")}
xxx.flatMap(string => words(string))
您將看到所有單個字符串,而不是一個串聯的字符串。
這對於flatMap
方法的其他類型在邏輯上是必需的。對於
Some("there").flatMap(str => Some(str.toUpperCase))
沒有「扁平化」,你可以在選項Some(there)
上flatMap被稱爲執行。一旦我們嵌套一次性上下文,即當考慮假設的中間值flatten
將被調用以生成Some(THERE)
時,「展平」僅被定義和有意義。
謝謝我的朋友,我明白了,非常感謝你。 –
flatMap可以看作是操作'map'和'flatten'的組合。
至於你的問題,答案是'拆分',然後'平坦'。
下面的例子是用來說明這一點:
val nestedNumbers = List(List(1, 2), List(3, 4))
nestedNumbers.flatMap(x => x.map(_ * 2))
輸出是
res0: List[Int] = List(2, 4, 6, 8)
,這等效於以下代碼:
nestedNumbers.map((x: List[Int]) => x.map(_ * 2)).flatten
,它的輸出是也
res0: List[Int] = List(2, 4, 6, 8)
的引用是有 https://twitter.github.io/scala_school/zh_cn/collections.html#flatMap
有好運氣
好的,現在我知道了,謝謝你們,這是你非常熱情的心。 –
flatMap是地圖的組合,然後壓平。下面的例子可以解釋我們調用map然後變平的過程,並且結果是List [Char],而flatMap直接將Seq轉換爲List [Char]。
val avengers = Seq("Ironman", "Thor", "Captain America")
val capsAvengers = avengers.map(_.toUpperCase)
println(avengers)
println(capsAvengers)
println(capsAvengers.flatten)
println(avengers.flatMap(.toUpperCase))
結果:
List(Ironman, Thor, Captain America)
List(IRONMAN, THOR, CAPTAIN AMERICA)
List(I,R,O,N,M,A,N,T,H,O,R,C,A,P,T,A,I,N, ,A,M,E,R,I,C,A)
List(I,R,O,N,M,A,N,T,H,O,R,C,A,P,T,A,I,N, ,A,M,E,R,I,C,A)
謝謝我明白了,非常感謝 –
許多很好的答案,但都太長了:) 這很簡單:你分割之前,沒有什麼拉平。
- - !,你一定是個聰明的孩子,謝謝。 –
- 1. 我想知道如何用wpf創建地圖或平面圖
- 2. 如何用日夜高亮生成地球的平面地圖?
- 3. 扁平化地圖(或環)
- 4. 在PowerShell中等效的平面地圖
- 5. 渲染TMX地圖上Threejs平面
- 6. Android LibGDX:平鋪地圖封面動畫
- 7. RxJava-如何背壓平面地圖()
- 8. 地圖拼合和平面地圖不等價
- 9. 斯卡拉 - 地圖和平面地圖之間的差異
- 10. 平鋪地圖
- 11. 非平面圖平面化算法
- 12. 平面圖繪圖C++
- 13. 平面圖軟件
- 14. 平面圖佈局
- 15. 3D平面/地圖:模型與原生代碼?
- 16. 圖像的地理座標(如谷歌平面圖)
- 17. 使用Android Studio手動添加平面圖到谷歌地圖
- 18. 將地圖標記添加到HTML5中的平面圖
- 19. 隱藏谷歌地圖樓層平面圖
- 20. 如何在沒有Cocos2d的情況下使用平鋪地圖?
- 21. 在Google地圖中平移時無法發佈地圖
- 22. 谷歌地圖V3:觸發地圖平移事件
- 23. Scala:在一組字符串上執行多個地圖和平面地圖
- 24. 如何將平面地圖和以前的單人地圖結合起來
- 25. 地圖和平面地圖操作對於ReaderMonad意味着什麼
- 26. SFML平臺與地圖平鋪碰撞
- 27. 平面圖圖像的熱圖生成器
- 28. 安卓平鋪地圖
- 29. Pygame中的平鋪地圖
- 30. 地圖平展在JS?
好的,我明白了,謝謝。 –