Scalaの新機能です。練習として、ガード付きタプルのリストにマッチステートメントを書くようにしています。私はマップが問題を解決するだろうが、私はパターンマッチングの理解を得ようとしていることを知っています。Scalaマッチガードを持つタプルのリスト
私は引数としてList[(Char, Int)]
をとる関数を書くようにしています。この関数はエントリをソートし、2つのエントリが同じキー値を持つ場合、それらは一緒に追加されます。したがって、次の引数List(('q', 1'), ('a', 1), ('c', 2), ('a', 2), ('c', 1))
はList(('a', 3), ('c', 3'), ('q', 1))
になります。
私は次のコードが付属しています:
def sortAndAggregateList(chars: List[(Char, Int)]) : List[(Char, Int)] = {
chars match {
case (charP1, numP1) :: (charP2, numP2) :: (x : List[(String, Int)]) if (charP1 > charP2) =>
sortAndAggregateList((charP2, numP2) :: (charP1, numP1) :: x)
case (charP1, numP1) :: (charP2, numP2) :: (x : List[(String, Int)]) if (charP1 < charP2) =>
sortAndAggregateList((charP1, numP1) :: (charP2, numP2) :: x)
case (charP1, numP1) :: (charP2, numP2) :: (x : List[(String, Int)]) if (charP1 == charP2) =>
sortAndAggregateList((charP1, numP1 + numP2) :: x)
case Nil =>
Nil
}
}
しかし、私は次の警告を得る:
:14:警告:無益なタイプのテスト:List型の値[(シャア、int)を]リスト[(String、Int)](リスト[(String、Int)])の根底にあるListでもかまいません。 x
はAny
のエラーです。
提案がありますか?
を削除したくない場合は、エラー・メッセージを参照してください:あなたは '' chars'に対して一致していますList [(Char、Int)] 'であるが、パターンでは' x 'は 'List [(String、Int)]'であると期待する。 – Josef