如何在Scala的列表中获取项目?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

在这个世界中,如何从scala中的List 获得索引i中的元素?

我试过了get(i)[i]没有任何效果。谷歌搜索只返回如何“找到”列表中的元素。但是我已经知道元素的索引了!

以下是不能编译的代码:

def buildTree(data: List[Data2D]):Node ={
  if(data.length == 1){
      var point:Data2D = data[0]  //Nope - does not work

  }
  return null
}
提问于
用户回答回答于

使用括号:

data(2)

但是你并不是很想经常使用列表,因为链表需要时间来遍历。如果你想索引到一个集合,使用Vector(不可变)或ArrayBuffer(可变)或可能Array(这只是一个Java数组,除了再次索引它(i)而不是[i])。

用户回答回答于

更安全的是,lift如果它存在,则可以提取值,如果不存在则失败。

data.lift(2)

如果列表的长度不足以提供该元素,则返回None,如果是,则返回Some(value)。

scala> val l = List("a", "b", "c")
scala> l.lift(1)
Some("b")
scala> l.lift(5)
None

无论何时您执行可能以此方式失败的操作,使用选项并获取类型系统以帮助确保处理元素不存在的情况是很好的。

说明:

这是有效的,因为List的apply(只含括号括起来的l(index))就像是一个局部函数,它在列表中有一个元素的地方被定义。该List.lift方法apply通过将结果基本上包装在一个选项中,将部分函数(仅为某些输入定义的函数)转换为正常函数(为任何输入定义)。

扫码关注云+社区