1

次のような (String, Int, Int) のトリプルを含む結果シーケンスが必要です。

var all_info: Seq[(String, Int, Int)] = null

次のように Seq に要素を追加してみます。

  if (all_info == null) {
    all_info = Seq((name, id, count))
  } else {
    all_info :+ (name, id, count)
  }

そしてそれらを印刷します

    Console.println(all_info.mkString)

残念ながら、出力された結果は、if 句によって追加された最初のトリプルにすぎず、基本的に新しい Seq を初期化します。これは、以前は単に「null」だったためです。else 句で Seq に追加されるはずの後続のすべてのトリプルはそうではありません。また、「++」などのさまざまな方法も試しましたが、どちらも機能しません(「引数が多すぎます」)

ここで何が間違っているのか本当にわかりません。

事前に助けてくれてありがとう!ご挨拶。

4

2 に答える 2

4

まず、nulls を使用する代わりに、空のコレクションを使用することをお勧めします。次に :+= を使用して、:+ の結果が破棄されないようにします— :+ は、既存のコレクションを変更する代わりに、結果として新しいコレクションを生成します。最終的なコードは次のようになります

var all_info: Seq[(String, Int, Int)] = Seq.empty
all_info :+= (name, id, count)

ご覧のとおり、 s は不要ifになり、コードは正常に動作するはずです。

于 2013-06-04T14:35:20.703 に答える
2

メソッド:+は新しいコレクションを作成し、元のコレクションはそのまま残します。

メソッドを使用する必要があります+=。コンパイラにメソッド+=がない場合はとして扱います。all_infoall_info += (name, id, count)all_info = all_info + (name, id, count)

逆に、 の型を変更可能なコレクションに変更すると、その中all_infoにメソッド+=が含まれるため、コードは期待どおりに動作します。変更可能なコレクションのメソッド+=は、ターゲット コレクションを変更します。

mutable collectionsにはメソッドがないことに注意してください。そのため:+=、可変コレクションでも取得できます。all_info = all_info :+ (name, id, count)

于 2013-06-04T14:35:41.973 に答える