删除给定索引处的元素

时间:2016-02-15 19:00:40

标签: scala scala-collections

在Scala中,我有一个名为Array[Int]的{​​{1}}对象。

我想删除索引elem处的元素。

我试过这个:

k

但是,这会删除所有等于elem.filter(! _.equals(elem(k))) 的元素。

我怎样才能删除索引elem(k)处的元素?

4 个答案:

答案 0 :(得分:14)

对于所有集合(您可以查看#include <iostream> using namespace std; class Emp { public: static int id; int sal; Emp() { Emp::id =10; // When i comment this line its working fine. }; }; int main(int argc, const char * argv[]) { Emp Ram; cout << Ram.sal ; return 0; } ),您可以使用返回新集合的不可变Array方法:

patch

如果您想要一个可变集合,可能需要查看val xs = Seq(6, 5, 4, 3) // replace one element at index 2 by an empty seq: xs.patch(2, Nil, 1) // List(6, 5, 3) 而不是Buffer

Array

答案 1 :(得分:3)

实现这一目标的一种补充方法是在索引周围采取和放弃:

val filteredElem = elem.take(k) ++ elem.drop(k+1)

答案 2 :(得分:2)

elem.zipWithIndex.filter(_._1 != k).map(_._2)

如果你有 Array("a", "b", "c")然后zipWithIndex - 转换为Array((0, "a"), (1, "b"), (2, "c"))

答案 3 :(得分:2)

使用splitAt如下,

val (l,r) = xs.splitAt(k)
l ++ r.drop(1)

与使用zipWithIndex类似,我们生成索引范围并过滤掉值k,然后我们可以提取其余的,如下所示,

(0 until xs.size).filter(_ != k).map(xs)

使用collect

 (0 until xs.size).collect {
   case x if x != k => xs(x)
 }

使用for comprehension,

for (i <- 0 until xs.size if i != k) yield xs(i)

一种更通用的形式,我们有一组要排除的索引,即

val exclude = Set(k,k+3)
for (i <- 0 until xs.size if !exclude(i)) yield xs(i)

我们映射不在exclude中的索引。