Добрый день! Я использую Scala, и я хочу сопоставить первые три элемента списка и последний, независимо от того, сколько из них в списке.Последний элемент массива, соответствующий scala
val myList:List[List[Int]] = List(List(3,1,2,3,4),List(23,45,6,7,2),List(3,3,2,1,5,34,43,2),List(8,5,3,34,4,5,3,2),List(3,2,45,56))
def parse(lists: List[Int]): List[Int] = lists.toArray match{
case Array(item, site, buyer, _*, date) => List(item, site, buyer, date)}
myList.map(parse _)
Но я получаю: error: bad use of _* (a sequence pattern must be the last pattern)
Я понимаю, почему я получаю это, но как я могу избежать?
Мое использование - это то, что я читаю из hdfs, и каждый файл имеет точные столбцы N (N является постоянным и равным для всех файлов), поэтому я хочу сопоставить только некоторые из них, не записывая что-то вроде case Array(item1, item2 , ..., itemN) => List(item1, item2, itemK, itemN)
Спасибо!
Вы хотите добавить ', если (tail.nonEmpty)', в противном случае это будет соответствовать 'List (1, 2, 3) ', но вызывать' NoSuchElementException', когда вы вызываете 'tail.last'. –
@ m-z Я исправил свой ответ, THX! – ipoteka
Или просто используйте 'myList match { case item :: site :: buyer :: (_: + date) => Список (элемент, сайт, покупатель, дата)}' – Kolmar