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

正如评论中所指出的,Scala 的List方法非常不同。您仍然可以使用该类型,因为它非常简单且有用,只是您不能使用drop. 无论如何,您使用变量 carfoundwhile的迭代类型if仍然非常java'ish。

尝试使用 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)

我上面使用的方法partition就在 Scala 集合介绍的开头。.

于 2013-04-03T21:27:51.557 回答