2014-11-12 4 views
2

Мне нужно вернуть два списка - список строк до первой строки, содержащей '-', а затем остальные элементы.splitAt '-' в scala

так я пытался lst.splitAt («-»), но он продолжает делать

scala> val lst = List(" Hi this is - a test") 
lst: List[String] = List(" Hi this is - a test") 

scala> lst.splitAt('-') 
res8: (List[String], List[String]) = (List(" Hi this is - a test"),List()) 

как я могу исправить это, так что я буду получать (List (»Привет, это -), Список (тест")) ?

+0

Вы разделив список. Вам нужно разбить содержащуюся строку. –

+0

@DonRoby Как я могу настроить таргетинг на строку внутри списка? – acolisto

ответ

6

Аргумент для List 's splitAt - это Int. ваш «-» это принуждают к 45 и пытается разбить список на индекс 45.

Вы можете сделать это для одной строки:

"hello-test-string".split('-') 

В результате этого (в SBT) является:

res0: Array[String] = Array(hello, test, string) 

вы можете отобразить эту функцию над списком строк, если вы хотите:

List("hello-test-string", "some-other-cool-string").map(_.split('-').toList) 

в результате этого:

res1: List[List[String]] = List(List(hello, test, string), List(some, other, cool, string)) 
+0

'-' принужден к 45? в Скала? wow ... –

+0

Я тоже был удивлен. –

+0

можно ли это сделать без использования массивов и просто получить (list(), list())? @TimDestan – acolisto

1

Рассмотрим span вместе с unzip, как это,

lst.map(_.span(_ != '-')).unzip 

который поставляет

(List(" Hi this is "),List("- a test")) 

Обратите внимание, что span делит пополам коллекцию (в данном случае каждая строка в списке) до первый элемент, который не содержит условия (равен '-' здесь).

Update

Для включения в '-' полукокса, мы можем определить takeUntil метод на строках, например, следующим образом,

implicit class StringFetch(val s: String) extends AnyVal { 
    def takeUntil(p: Char => Boolean) = { 
    val (l,r) = s.span(p) 
    val (rl,rr) = r.span(!p(_)) 
    l + rl 
    } 
} 

Следовательно

lst.map(_.takeUntil(_!= '-')) 
res: List[String] = List(" Hi this is -") 
+0

есть в любом случае, чтобы «-» в первом списке? – acolisto

+0

@acolisto обратите внимание на обновление – elm