2017-06-29 1 views
4

Je suis nouveau à Scala Collections et actuellement je veux séparer une liste donnée de chaînes dans un tuple de deux listes (List[String], List[String]), qui contient la liste des chaînes de palindrome et le reste des chaînes d'entrée.La liste dans scala n'est pas mise à jour

Par exemple, si l'entrée est List("racecar", "abcd", "lilil", "effg") sortie doit être (List("racecar", "lilil"), List("abcd", "effg"))

J'ai une solution en utilisant un filtre. Mais, actuellement, en essayant d'affiner ma solution en utilisant foldLeft. Ma nouvelle approche est la suivante:

def stringTuples2(strings: List[String]): (List[String], List[String]) = { 
strings.foldLeft((List[String](), List[String]()))((b, a) => { 
    if (a.equals(a.reverse)) { b._1 :+ a; b } 
    else { b._2 :+ a; b } 
})} 

Je ne sais pas, ce que je fais mal, mais la sortie de cette solution est tuple de deux listes vides, à savoir (Liste(), Liste()).

L'aide est appréciée. Merci!

+3

Cela semble être un cas parfait d'utilisation pour 'partition':' myList.partition (x => x.reverse == x) ' – Akavall

+0

Merci @Akavall pour une contribution précieuse! –

Répondre

8

Votre tentative de modifier b crée une nouvelle List, vous jetez ensuite le nouveau et revenez Listb, ce qui ne change pas. Sortez la partie ;b et renvoyez la ligne mise à jour: (b._1 :+ a, b._2) ou (b._1, b._2 :+ a)

BTW, voici une approche différente de la solution.

List("racecar", "abcd", "lilil", "effg").partition(s => s == s.reverse) 
+0

Merci, @jwvh! Votre explication m'a vraiment aidé à comprendre le problème. Aussi, je comprends que 'partition()' va vraiment rendre ma vie plus facile dans de tels cas d'utilisation, c'est juste que j'essaie d'apprendre les différentes fonctions et leurs (éventuelles) mises en garde. Merci encore! –

+0

La meilleure façon de remercier quelqu'un sur le débordement de pile est d'accepter sa réponse si c'est la meilleure réponse que vous avez, et cela résout votre question. –

+1

@RyanTheLeach, j'ai compris! Je réalise, c'est un bon apprentissage des protocoles Stack Overflow, en plus de Scala! :) –