【问题标题】:Delete first element of List in Scala在Scala中删除List的第一个元素
【发布时间】:2015-11-07 20:57:33
【问题描述】:

我正在尝试使用递归函数遍历 List[Char] 中的每个元素,以检查元素的出现次数。我知道有更简单的方法甚至功能可以做到这一点,但是有什么方法可以只删除列表的第一个位置吗?

我尝试使用 drop,甚至使用了以下截图,但它什么也没做,其中 test 是列表的名称:

def delete(i: Int) = test.take(i) ++ test.drop((i+1));

我试图避免使用 ListBuffer,并尝试转换为 Array 但再次没有成功。

【问题讨论】:

  • 以不同的方式考虑它。您需要除head 之外的所有列表。为此,存在 tail 函数。
  • tail 不应使用,因为它是一个部分函数,​​即它会为空列表抛出异常。 Many of the functions ... like head, tail, init, and many many others fail unnecessarily. -stackoverflow.com/a/23184020/409976
  • any way to delete just the first position of a List?List#drop(1) 回答了这个问题。为什么它对你不起作用?
  • 你说得对,drop 函数更简单。

标签: arrays scala list scala-collections


【解决方案1】:

您的函数几乎可以删除第 i 个位置的项目,我只需将“测试”列表作为参数添加到它:

scala> def delete[A](test:List[A])(i: Int) = test.take(i) ++ test.drop((i+1))
delete: [A](test: List[A])(i: Int)List[A]

scala> delete((1 to 10).toList)(3)
res0: List[Int] = List(1, 2, 3, 5, 6, 7, 8, 9, 10)

我认为您试图使用函数 delete 对“测试”产生一些影响,但 List 是不可变的,函数 delete 不会产生副作用,它只会返回新 List

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多