使用循环并仅使用循环从Scala中的列表中删除元素

使用循环并仅使用循环从Scala中的列表中删除元素,scala,Scala,我编写了这段代码,其中我将元素从一个列表复制到另一个列表,以排除一个元素,我使用for循环,在for循环中有一个if语句,它表示将所有不等于值l的元素复制到新列表,并排除具有我输入的索引的元素,代码不工作,也没有复制元素,请有人告诉我有什么问题吗 object delete { def delete_Element(symbol:List[Char],l:Int): List[Any] ={ var copy_Symbol=List[Char](4) for (i <- 0 until s

我编写了这段代码,其中我将元素从一个列表复制到另一个列表,以排除一个元素,我使用for循环,在for循环中有一个if语句,它表示将所有不等于值l的元素复制到新列表,并排除具有我输入的索引的元素,代码不工作,也没有复制元素,请有人告诉我有什么问题吗

object delete {
def delete_Element(symbol:List[Char],l:Int): List[Any] ={
var copy_Symbol=List[Char](4)
for (i <- 0 until symbol.length) {
  if (i!=l) {
     copy_Symbol(i) = symbol(i)
  }
}
  copy_Symbol
}
def main(args: Array[String]): Unit = {
val symbol=List('a','b','c','d')
println(symbol)
println("Enter an index to delete an element from the List : ")
val l=scala.io.StdIn.readInt
print(delete_Element(symbol:List[Char],l:Int))
}
}
对象删除{
def delete_元素(符号:List[Char],l:Int):List[Any]={
var copy_Symbol=列表[Char](4)

对于(i<p> <代码>列表< /COD>是不可变的集合,因此您不能更新它的元素。请考虑使用一些可变集合,如<代码> ListBuffer <代码>,然后将其转换为<代码>列表< /代码> .<
def delete_元素(符号:List[Char],l:Int):List[Any]={
val copy_Symbol=ListBuffer[Char]()

因为(我不这样做。变量是不好的。按索引访问
列表
元素更糟糕。
任何
都是代码味道。
列表
是不可变的(你不能向它添加东西),
列表[Char](4)
不会做你认为它会做的事情,而且
复制符号(i)=Symbol(i)
根本不应该编译。而你呢(几乎)不需要在scala中编写循环(或
var
)。
def del(s:List[Char],l:Int)=s.zipWithIndex.collect{case(c,i)if i!=l=>c}
您使用的列表就像是一个永远不会工作的数组。请先学习语言,不仅仅是语法,还要学习stdlib和常用习惯用法。这就像试图用螺丝刀在一块木头上钻一个洞。这是可以做到的,但有更好的方法。您是否想过简单地过滤掉不需要的元素?例如。g、 ,
var
s不是继承性的错误,但建议尽可能将不可变对象与
val
一起使用。在这种情况下,Dima的解决方案是最好的,尽管它可以通过view进行改进(这是另一个主题)你们也可以从for循环中获得类似的功能。伙计们,我理解,但我被要求使用一个循环,只有一个循环,没有过滤,没有其他