2017-06-29 10 views
4

私はScala Collectionsを初めて使いました。現在は、文字列のリストを2つのリスト(List[String], List[String])のタプルに分割したいと考えています。このリストには、回文文字列のリストと残りの入力文字列が含まれています。例えばスカラーのリストが更新されない

入力がList("racecar", "abcd", "lilil", "effg") 出力された場合には、 は、私は、フィルタを使用してソリューションを持っている(List("racecar", "lilil"), List("abcd", "effg"))

でなければなりません。しかし、現在、foldLeftを使って私の解決策を洗練しようとしています。次のように私の新しいアプローチがある:私が間違っているの何

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 } 
})} 

私は、わからないが、このソリューションの出力は2つの空のリストのタプルである、すなわち、(リスト()、リスト())。

お手数ですが、ありがとう!

+3

これは 'partition'のための完全なユースケースのように思える:貴重な入力のための' myList.partition(X => x.reverse == x) 'は – Akavall

+0

おかげ@Akavall! –

答えて

8

Listを変更すると、新しいListが返され、bが返されます。これは変更されません。 ;b部分を取り出して、更新されたタプルを返す:(b._1 :+ a, b._2)または(b._1, b._2 :+ a)

ところで、ここでは解決方法が異なります。

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

ありがとう、@ jwvh!あなたの説明は本当に私が問題を理解するのを助けました。また、 'partition()'は実際にそのようなユースケースで私の人生を楽にしてくれることを理解しています。ただ、私はさまざまな機能とその(可能な)警告を学びたいと思っています。 もう一度おねがいします! –

+0

スタックオーバーフローに誰かに感謝する最善の方法は、あなたが得た最高の応答であり、あなたの質問を解決するならば、彼らの答えを受け入れることです。 –

+1

@RyanTheLeach、それを持っています!私はそれがScalaに加えて、Stack Overflowプロトコルの良い学習だと思います! :) –

関連する問題