2017-05-25 118 views
0

如果我想將諸如「qwertyzxc」(9個元素)(['q','w','e','r','t','y','z','x','c'])之類的字符列表拆分爲長度爲3的字符串列表,我就會陷入困境。我該怎麼做? 實施例:如何將一個字符串分成長度爲3的字符串列表?

輸入:['q','w','e','r','t','y','z','x','c'] 輸出:[['q','w','e'],['r','t','y'],['z','x','c']]

謝謝,一直停留在這個相當長的一段

+0

如果在一個更普遍的版本名單不能被三分之一? –

+0

輸入總是9的大小。這只是它被利用的方式。如果它不是9,我想它會給你一個錯誤信息,說它不是正確的大小。 – Zarolan

+3

Data.List.Split.chunksOf –

回答

3

如果段長度被固定爲3,然後可能會做通過圖案如下匹配

segment :: [a] -> [[a]] 
segment []   = [] 
segment [x]   = [[x]] 
segment [x,y]  = [[x,y]] 
segment (x:y:z:rest) = [x,y,z] : segment rest 

*Main> segment [1,2,3,4,5,6,7,8,9] 
[[1,2,3],[4,5,6],[7,8,9]] 
+0

我的GHCI返回* Main> [「..3.2.6 ..」,「9..3.5..1」,「.. 18.64 ..」,「.. 81.29 .. 」, 「7 ....... 8」, 「67.82 .. ..」, 「.. .. 26.95」, 「8..2.3..9」, 「.. 5.1.3 ..」] 。你知道爲什麼它使用'''而不是'['?' – Zarolan

+0

因爲字符串是一個Char列表,​​而Show實例被定義爲以字符串的形式顯示字符列表 –

2

或者你也可以試試這個,具有長度的檢查免費:

segment :: [a] -> [[a]] 
segment [a,b,c,d,e,f,g,h,i] = [[a,b,c],[d,e,f],[g,h,i]] 
segment   _   = error "the list hasn't 9 items" 

然後嘗試:

> segment [1,2,3,4,5,6,7,8,9] 
[[1,2,3],[4,5,6],[7,8,9]] 

> segment [1,2,3,4,5,6,7,8] 
*** Exception: the list hasn't 9 items 
+0

@Zarolan,字符串是字符列表。 ghci通常顯示列表'h':'o':'l':'a':[]'as'「hola」 – Nykros

1
p3::[a] -> [[a]] 
p3 [] = [] 
p3 l = take 3 l : (p3 $ drop 3 l) 

,你可能會注意到,你可以很容易地把它轉化爲的pN

相關問題