2010-09-13 13 views
22

Im sabit büyüklükte alt dizeleri içine verilen bir dize (dizisindeki son dizesi daha kısa olabilir) bölmek için Scala bir zarif yol arıyoruz. Dize eşit uzunluktaki alt dizelere nasıl bölünür?

Yani

split("Thequickbrownfoxjumps", 4) 

Tabii

["Theq","uick","brow","nfox","jump","s"] 

ben sadece bir döngü kullanabilirsiniz verim ama daha şık (fonksiyonel tarzı) çözümü olmalı gerekir. Bunun gibi

cevap

55
scala> val grouped = "Thequickbrownfoxjumps".grouped(4).toList 
grouped: List[String] = List(Theq, uick, brow, nfox, jump, s) 
1

:

def splitString(xs: String, n: Int): List[String] = { 
    if (xs.isEmpty) Nil 
    else { 
    val (ys, zs) = xs.splitAt(n) 
    ys :: splitString(zs, n) 
    } 
} 

splitString("Thequickbrownfoxjumps", 4) 
/************************************Executing-Process**********************************\ 
( ys  ,  zs   ) 
    Theq  uickbrownfoxjumps 
    uick  brownfoxjumps 
    brow  nfoxjumps 
    nfox  jumps 
    jump  s 
    s   ""     ("".isEmpty // true) 


"" :: Nil     ==> List("s") 
"jump" :: List("s")   ==> List("jump", "s") 
"nfox" :: List("jump", "s") ==> List("nfox", "jump", "s") 
"brow" :: List("nfox", "jump", "s") ==> List("brow", "nfox", "jump", "s") 
"uick" :: List("brow", "nfox", "jump", "s") ==> List("uick", "brow", "nfox", "jump", "s") 
"Theq" :: List("uick", "brow", "nfox", "jump", "s") ==> List("Theq", "uick", "brow", "nfox", "jump", "s") 


\***************************************************************************/ 
İlgili konular