2013-02-11 12 views
9

Esiste un metodo in scala per ottenere l'elemento (singolo) di una Lista o Seq e la coda (raccolta) dell'elenco? So che c'èOttieni articoli di testa e coda dalla lista scala

def splitAt(n: Int): (List[A], List[A]) 

e posso facilmente afferrare il singolo elemento dal primo elenco della tupla. Ma c'è qualche metodo integrato che è fondamentalmente questo?

def splitAtHead: (Option[A], List[A]) 

Come ho detto, si può facilmente concatenare splitAt per restituire la firma giusta, ma ho pensato dotato di un metodo potrebbe essere in grado di salvare una tupla intermedio.

Edit:

@ risposta di om-nom-nom è corretto, ma questo è il motivo per cui non ho potuto usare la sua seconda versione.

List[S](s1, s2, s3, s4).sortBy { _.f (h) } match { 
    case hd :: tail => recurse(tail) 
} 

risposta

24

È possibile utilizzare il pattern matching:

val hd::tail = List(1,2,3,4,5) 
//hd: Int = 1 
//tail: List[Int] = List(2, 3, 4, 5) 

O solo .head/metodi .tail:

val hd = foo.head 
// hd: Int = 1 
val hdOpt = foo.headOption 
// hd: Option[Int] = Some(1) 
val tl = foo.tail 
// tl: List[Int] = List(2, 3, 4) 
+0

Ah, pattern matching, ovviamente. Per qualche ragione pensavo che 'case hd :: tail' avrebbe fallito per un singolo elenco di elementi. Ma l'ho appena testato e ha funzionato bene. Modificherò la mia domanda per rispondere perché non ho potuto usare la tua seconda versione. – Falmarri

Problemi correlati