假設我有一個串列["foo", "bar", "othercoolword"],我想知道每個元素的長度。我將會做
map length ["foo"/span>, "bar"/span>, "othercoolword"/span>]
然后它回傳[3,3,13]。 但是,如果我有一個串列中的串列,那么,例如
[["f"/span>,"bee"/span>,"oba"/span>],["aloo", "d","e"],["xnx","y","z"]
我想讓它回傳[[1,3,3], [4,1,1], [3,1,1]]。然后在這個串列中的每個串列上取最大值。這將使我得到 [3,4,3]。
長話短說:我對這些串列中的串列感到困惑。有什么簡單的方法可以做到這一點嗎?
uj5u.com熱心網友回復:
是的,很簡單。觀察一下
map length ["foo"/span>, "bar"/span>, "othercoolword"/span>]
=>
[3 , 3 , 13 ] 。
map length [["f","bee","oba"], ["alloo", "d","e"], ["xnx", "y","z","w"]]。
=>
[3 ,3 ,4 ].
map length ["f","bee", "oba"]
=>
[1 ,3 ,3 ].
map length ["aloo","d", "e"]
=>
[4 ,1 ,1 ].
map length ["xnx","y","z","w"]
=>
[3 ,1 ,1 ,1 ]。
這樣,
map (map length) [["aloo"/span>,"d"/span>, "e"],["xnx","y","z","w"] ]
=>
[[4 ,1 ,1] 。 [3 ,1 ,1 ,1 ]]
然后
map maximum [[4 ,1 。 1 ],[3 ,1 ,1 ] ]
=>
[4 , 3 ] =>。
因此,只需命名你的臨時變數,并按你的意愿使用它們。
uj5u.com熱心網友回復:
你想使用map兩次,首先在外部串列上,然后在內部串列上。 通過一個匿名函式,你可以做到:
lengthInnerList list = map (x -> map (length) x) list
另外,你可以這樣明確地做:
outer list = map (inner) list
inner x = map length x
然后對該串列應用最大函式。
uj5u.com熱心網友回復:
對于我們串列中的每個子串列,我們需要用map ...來計算其專案的長度,然后用另一個簽名為Ord a => [a] -> a的函式計算這些長度的最大值。如果我們對每個子串列都這樣做,我們就會得到:
-- ↓ ↓ left as an exercise。
map (......) 。地圖......。 ) [["f","bee","oba"], ["aloo","d"。 "e"],["xnx","y","z"]】
在這里,我把實作...部分作為一個練習。第一個部分的簽名是[Int] -> Int,應該確定一個Int串列的最大值,第二個部分需要將一個String轉換為一個Int,確定字串的長度。
如果一個子串列是空的,那么計算該子串列中元素的最大長度,將會引發一個錯誤,因為我們不能確定一個空串列的最大長度。因此,也許更好的做法是回傳一個型別為[Maybe Int]的值,如果子串列中沒有任何專案,這個值可以是Nothing。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/329823.html
標籤:
上一篇:如何用硬接線功能進行測驗
