Scala如何通过索引获取子列表

时间:2015-05-14 10:29:58

标签: scala

我有一个List(1,2,3,4,5)并尝试通过以下方式获取子列表:List(3,4):

List(1 ,2 ,3 ,4 ,5).slice(this.size - 3 , this.size - 1 )

但我收到了错误

error: value size is not a member of object

我如何使用"这个" Scala中的参数就像在Java中一样。是否有其他方法可以实现目标。非常感谢你。

4 个答案:

答案 0 :(得分:12)

您应首先声明列表,然后使用其名称list而不是this来引用列表:

val list = List(1 ,2 ,3 ,4 ,5)
list.slice(list.size -3, list.size -1)

如果您真的想在一行中执行此操作,请使用reverse,但效率不高:

List(1 ,2 ,3 ,4 ,5).reverse.slice(1, 3).reverse

顺便说一句,该代码在Java中也无效。 this指的是封闭对象,而不是列表。

答案 1 :(得分:4)

如果您想要最后3个或n个元素,可以使用takeRight(3)takeRight(n)

根据问题编辑进行编辑:

如果您不需要先使用fl个元素,那么

List(1,2,3,....n).drop(f).dropRight(l) 

对于您的情况,它将是List(1,2,3,4,5).drop(2).dropRight(1)

答案 2 :(得分:0)

问题是,这个单词并不是指向你的List,如果你想在List中间使用一些参数take takeRigth请阅读Scala Docs,最后是链接

val my_lst = List(1 ,2 ,3 ,4 ,5)
my_lst.takeRight(3).take(2)

my_lst: List[Int] = List(1, 2, 3, 4, 5)
res0: List[Int] = List(3, 4)

首先使用右侧my_lst.size - thepositions的索引计数,所以你必须在新的子列表中写下这些位置,然后你需要多少个元素

以下是对scala List

中方法的工作原理的解释

来自Scala帮助文档

  

def slice(from:Int,until:Int):List [A]

     

返回

a list containing the elements greater than or equal to index from extending up to (but not including) index until of this list.
     

定义类       列表→LinearSeqOptimized→IterableLike→TraversableLike→GenTraversableLike示例:

//给出一个清单 val letters = List('a','b','c','d','e')

// slice返回从索引from开始的所有元素,之后, //直到索引until(不包括索引until。) letters.slice(1,3)//返回List('b','c')

在你的情况下使用长度或大小

scala> val my_lst = List(1 ,2 ,3 ,4 ,5)
my_lst: List[Int] = List(1, 2, 3, 4, 5)

scala> my_lst.slice(my_lst.length-3,my_lst.length)
res0: List[Int] = List(3, 4, 5)

但是真正的scala List类有很多适合你的功能。在你的情况下,如果你想要最后3个元素使用takeRight

  

def takeRight(n:Int):列出[A]

     

选择最后n个元素。

     

名词

the number of elements to take returns

a list consisting only of the last n elements of this list, or else the whole list, if it has less than n elements. 
     

定义类       列表→IterableLike

scala> my_lst.takeRight(3)
res2: List[Int] = List(3, 4, 5)

看看Scala Docs

答案 3 :(得分:-2)

你有一个清单(1,2,3,4,5)

1)那是一个函数或对象还是一个类?

2)您想使用List(x,x,3,4,x)

中的返回值

3)您需要使用括号外的大小来从新的List函数中返回值...

4)创建一个函数来完成此步骤,然后将其返回到变量...

5)当你触发函数List()时,使用带有List(A,B,C,D,E)的变量

6)所有对象必须在使用前完全声明。例如,如何在没有空气的情况下使用篮球?或者如何在没有被猪皮覆盖的情况下使用足球?或者如何在没有CPU的情况下使用计算机?必须完全声明对象的所有组件并在编程中正常工作!

7)List()函数中的所有数据,函数和对象必须正常工作或...正常运行。 。 。

8)你说“一般来说我也希望在中间得到一些元素”..

9)作为资深程序员...你必须确切知道List()函数中元素的位置

10)同样从一开始,在您希望“使用”所有这些功能之前,您必须在程序的开头加载充满所有功能的类。

11)你不能像使用对象或类一样使用函数!

12)最后,你只想在编程语言设置规则或边界时发挥创意...... Scala不是Java ......

这有帮助吗? “错误:值大小不是对象的成员”