在Scala中,我有一个名为Array[Int]
的{{1}}对象。
我想删除索引elem
处的元素。
我试过这个:
k
但是,这会删除所有等于elem.filter(! _.equals(elem(k)))
的元素。
我怎样才能删除索引elem(k)
处的元素?
答案 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
中的索引。