YoB*_*Bre 17 scala list filter scala-2.10
我有一个列表如下:
val internalIdList: List[Int] = List()
internalIdList = List(11, 12, 13, 14, 15)
Run Code Online (Sandbox Code Playgroud)
从此列表中删除第三个元素以获取:
internalIdList = List(11, 12, 14, 15)
Run Code Online (Sandbox Code Playgroud)
我不能使用ListBuffer
,有义务维持现有的结构.我能怎么做?
谢谢大家
Rok*_*alj 46
有一个.patch
方法Seq
,所以为了删除第三个元素你可以简单地这样做:
List(11, 12, 13, 14, 15).patch(2, Nil, 1)
Run Code Online (Sandbox Code Playgroud)
其中说:从索引2开始,请删除1个元素,并将其替换为Nil.
深入了解这种方法使您能够做到这一点.您可以使用任意其他列表替换列表的任何子列表.
Sha*_*nds 17
如果你知道你将丢弃第三个元素(索引2),那么你可以简单地使用
val trunced = internalIdList.take(index) ++ internalIdList.drop(index + 1)
Run Code Online (Sandbox Code Playgroud)
否则,如果不事先知道该指数将要删除的元素是什么,你可以写类似以下的功能:
val trunced = internalIdList.take(index) ++ internalIdList.drop(index + 1)
Run Code Online (Sandbox Code Playgroud)
Nic*_*las 10
一种惯用的方法是使用索引压缩值,过滤,然后再次投影值:
scala> List(11,12,13,14,15).zipWithIndex.filter(_._2 != 2).map(_._1)
res0: List[Int] = List(11, 12, 14, 15)
Run Code Online (Sandbox Code Playgroud)
但你也可以使用splitAt
:
scala> val (x,y) = List(11,12,13,14,15).splitAt(2)
x: List[Int] = List(11, 12)
y: List[Int] = List(13, 14, 15)
scala> x ++ y.tail
res5: List[Int] = List(11, 12, 14, 15)
Run Code Online (Sandbox Code Playgroud)
如果您坚持使用老式方法,请使用收集:
List(1,2,3,4).zipWithIndex.collect { case (a, i) if i != 2 => a }
Run Code Online (Sandbox Code Playgroud)
不过,我还是更喜欢我另一个答案中的方法。