2012-12-12 1 views
1

Tenir compte de la déclaration suivante:Comment spécifier la plage à la fin de la liste?

process.text.readLines [3] .. < -1

Il semble que cela devrait fonctionner. Essentiellement, supprimez les deux premiers éléments du tableau. Cependant, l'opérateur de plage est confondu par la fin -1, puisque son moins de -1. Vous pouvez facilement résoudre ce problème en stockant le tableau en tant que variable et en remplaçant -1 par size() mais cela nécessite une ligne supplémentaire et la définition d'une variable. D'autres idées comment l'exprimer facilement?

Répondre

6

Je crois que vous pourriez faire:

process.text.readLines()[ 2..-1 ] 

ou:

process.text.readLines().drop(2) 
+0

ok donc c'est un problème avec l'opérateur "<". Cela semble générer [2, 1, 0, -1]. Ne devrait pas 2 .. <- 1 générer [2, 1, 0] alors? Est-ce un bug? – dromodel

2

Cela aussi faire l'affaire:

process.text.readLines().with { it[2..size()-1] } 

Il est plus que d'appeler simplement drop comme suggéré ci-dessus, mais il pourrait lire un peu mieux en fonction du contexte plus large. with vous permet de définir une nouvelle variable.

+0

Je crois que vous avez encore besoin des parenthèses sur la taille: 'it [2 ..

+0

Aussi une bonne solution. J'oublie toujours la valeur de() pour éviter les déclarations de variables. – dromodel

Questions connexes