首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Scala中获取列表中的项目?

在Scala中获取列表中的项目?
EN

Stack Overflow用户
提问于 2011-02-13 08:47:03
回答 4查看 281.7K关注 0票数 229

到底如何从scala中的列表中获取索引i处的元素呢?

我试过get(i),但[i] --什么都不起作用。Googling只返回如何在列表中“查找”元素。但是我已经知道元素的索引了!

下面是不能编译的代码:

代码语言:javascript
复制
def buildTree(data: List[Data2D]):Node ={
  if(data.length == 1){
      var point:Data2D = data[0]  //Nope - does not work
       
  }
  return null
}

看着List api也无济于事,因为我的眼睛刚刚交叉。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-13 08:59:02

使用括号:

代码语言:javascript
复制
data(2)

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

票数 341
EN

Stack Overflow用户

发布于 2014-03-04 01:23:28

更安全的方法是使用lift,这样您就可以提取存在的值,如果不存在则优雅地失败。

代码语言:javascript
复制
data.lift(2)

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

代码语言:javascript
复制
scala> val l = List("a", "b", "c")
scala> l.lift(1)
Some("b")
scala> l.lift(5)
None

当您执行可能以这种方式失败的操作时,最好使用一个选项,并让类型系统帮助确保您正在处理元素不存在的情况。

说明:

这是因为list的apply (只加圆括号,例如l(index))就像一个partial函数,只要list有元素就会定义它。List.lift方法将部分apply函数(仅为某些输入定义的函数)转换为普通函数(为任何输入定义),基本上是将结果包装在一个选项中。

票数 144
EN

Stack Overflow用户

发布于 2015-10-30 13:42:55

为什么用括号?

这是programming in scala一书中的一句话。

这个例子说明了

的另一个重要思想,它将让您深入了解为什么在Scala中使用括号访问数组。Scala的特殊情况比Java少。数组只是类的实例,就像Scala中的任何其他类一样。当您将一个或多个值的括号应用于一个变量时,Scala会将代码转换为对该变量调用一个名为apply的方法。因此,greetStrings(i)被转换为greetStrings.apply(i)。因此,在Scala中访问数组的元素只是一个简单的方法调用。这一原则并不局限于数组:对象对括号中某些参数的任何应用都将转换为apply方法调用。当然,只有当该类型的对象实际定义了apply方法时,才会编译。所以这不是特例;这是一个普遍的规则。

下面是几个使用函数式编程风格拉取特定元素(在本例中是第一个元素)的示例。

代码语言:javascript
复制
  // Create a multdimension Array 
  scala> val a = Array.ofDim[String](2, 3)
  a: Array[Array[String]] = Array(Array(null, null, null), Array(null, null, null))
  scala> a(0) = Array("1","2","3")
  scala> a(1) = Array("4", "5", "6")
  scala> a
  Array[Array[String]] = Array(Array(1, 2, 3), Array(4, 5, 6))

代码语言:javascript
复制
  // 1. paratheses
  scala> a.map(_(0))
  Array[String] = Array(1, 4)
  // 2. apply
  scala> a.map(_.apply(0))
  Array[String] = Array(1, 4)
  // 3. function literal
  scala> a.map(a => a(0))
  Array[String] = Array(1, 4)
  // 4. lift
  scala> a.map(_.lift(0))
  Array[Option[String]] = Array(Some(1), Some(4))
  // 5. head or last 
  scala> a.map(_.head)
  Array[String] = Array(1, 4)
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4981689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档