Comment diviser une séquence en deux listes par un prédicat?
Alternative: je peux utiliser filter
et filterNot
, ou écrire ma propre méthode, mais n'y a-t-il pas une meilleure méthode plus générale (intégrée)?
En utilisant la partition
méthode:
scala> List(1,2,3,4).partition(x => x % 2 == 0)
res0: (List[Int], List[Int]) = (List(2, 4),List(1, 3))
val (even, odd) = List(1,2,3,4).partition(x => x % 2 == 0)
est un moyen de détruire le tuple résultant departition
de manière lisible._ % 2 == 0
.Bon qui
partition
était la chose que vous vouliez - il y a une autre méthode qui utilise également un prédicat de diviser une liste en deux:span
.Le premier, partition mettra tous les éléments "vrais" dans une liste, et les autres dans la deuxième liste.
span mettra tous les éléments dans une liste jusqu'à ce qu'un élément soit "faux" (en termes de prédicat). À partir de là, il mettra les éléments dans la deuxième liste.
la source
Vous voudrez peut-être jeter un œil à scalex.org - il vous permet de rechercher dans la bibliothèque standard scala des fonctions par leur signature. Par exemple, tapez ce qui suit:
Vous verriez une partition .
la source
Vous pouvez également utiliser foldLeft si vous avez besoin de quelque chose d'un peu plus. Je viens d'écrire un code comme celui-ci lorsque la partition ne l'a pas coupé:
la source
Je sais que je suis peut-être en retard pour la fête et il y a des réponses plus précises, mais vous pourriez faire bon usage de
groupBy
Cela rend votre code un peu plus évolutif si vous devez changer la condition en quelque chose de non booléen.
la source
Si vous voulez diviser une liste en plus de 2 morceaux et ignorer les limites, vous pouvez utiliser quelque chose comme ça (modifiez si vous avez besoin de rechercher des entiers)
la source