1

一部の Java コードを scala に変換していますが、使用しているリストからオブジェクトを削除するのに問題があります。私のコードは以下です

def removeCar (usedCarList: List[UsedCars]):List[UsedCars] ={
    //var vinNumber = "";
    var car = new UsedCars();
    println("Please enter the Vin Number");
    var vinNumber = readLine();
    var i = 0;
    var found = false;
    while (i < usedCarList.length){
        car = usedCarList(i);
        if (vinNumber == car.vinNumber) {
            usedCarList.drop(i);
            println("** Removed Car with Vin Number " + vinNumber + " **");
            println(car.vinNumber);
            found = true;
        } 

drop が使用しようとしているものではないことはわかっていますが、特定のインデックスで要素をドロップする方法がわかりません。

4

1 に答える 1

1

コメントで指摘されているように、ScalaListには非常に異なるアプローチがあります。そのタイプは非常にシンプルで便利なので引き続き使用できますが、 のようなものは使用できませんdrop。いずれにせよ、変数 や などを使用した反復のタイプは、依然として car非常にJava っぽいです。foundwhileif

Scala コレクションが提供するマッピング、分割、およびフィルタリング関数を使用してみてください。

def removeCar (usedCarsList: List[UsedCars]): List[UsedCars] ={
  println("Please enter the Vin Number")
  val vinNumber = readLine()
  val (same, different) = usedCarsList.partition(_ == vinNumber)
  if (same.nonEmpty) {
    println("** Removed Car with Vin Number " + vinNumber + " **")
    same.map(_.vinNumber).foreach(println)
  }
  different
}

リストが変更されたことを確認する必要がない場合は、次のこともできます。

val removed = usedCarsList.filterNot(_ == vinNumber)

上記で使用した方法は、Scala コレクションの紹介の冒頭にありますpartition。.

于 2013-04-03T21:27:51.557 に答える