簡體   English   中英

如何從 Haskell 中的列表列表中創建新的列表列表?

[英]How to create a new list of lists from a list of lists in Haskell?

我有一個由這樣的列表列表組成的字段:

let list1 = ["a", "abcdefgh", "abc"]

我想獲得一個 5x5 的新字段,這樣可以有超過 5 行或列,但不少於。 如果有超過 5 個符號,則必須通過添加空格 ' ' 或保持原樣從前一個生成它。 對於其他行,不需要空格。 例如:

list2 = ["a    ", "abcdefgh", "abc  ", "     ", "     "]

或者:

let list1 = ["a", "abcdefgh", "c", "d", "e", "f"]
list2 = ["a    ", "abcdefgh", "c    ", "d    ", "e    ", "f"]

我想過 map、復制和長度,但我有點困惑。 如果可能,請不要使用庫(或僅使用 Data.Map)。 謝謝

您需要確定字符串的長度。 例如,您可以使用lambda 表達式來執行此操作,因此映射如下所示:

func :: [String] -> [String]
func mylines = map (\x -> … ) linesOfFiles ++ replicate (5-length mylines) (replicate 5' ')

其中x是將被映射的字符串,而是該值映射的表達式。 我留下填寫作為練習。

通常最好不要使用lengthlength需要線性時間,對於無限列表,這甚至會使程序陷入無限循環。

您可以使用遞歸來執行填充,例如:

padding :: Int -> a -> [a] -> [a]
padding 0 _ xs = …
padding n x [] = …
padding n x (x:xs) = …

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM