删除给定索引处的元素
Remove element at given index
在 Scala 中,我有一个名为 elem
的 Array[Int]
对象。
我想删除索引 k
处的元素。
我试过这个:
elem.filter(! _.equals(elem(k)))
但是,这会删除所有等于 elem(k)
的元素。
如何只删除索引 k
处的元素?
elem.zipWithIndex.filter(_._1 != k).map(_._2)
如果你有
Array("a", "b", "c")
然后 zipWithIndex
- 转换为 Array((0, "a"), (1, "b"), (2, "c"))
对于所有集合(您可以这样查看 Array
),您可以使用 returns 新集合的不可变 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
。
val ys = collection.mutable.Buffer(6, 5, 4, 3)
ys.remove(2)
ys // ArrayBuffer(6, 5, 3)
实现此目的的一种补充方法是围绕索引取舍:
val filteredElem = elem.take(k) ++ elem.drop(k+1)
使用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)
}
使用 a 进行理解,
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
。
在 Scala 中,我有一个名为 elem
的 Array[Int]
对象。
我想删除索引 k
处的元素。
我试过这个:
elem.filter(! _.equals(elem(k)))
但是,这会删除所有等于 elem(k)
的元素。
如何只删除索引 k
处的元素?
elem.zipWithIndex.filter(_._1 != k).map(_._2)
如果你有
Array("a", "b", "c")
然后 zipWithIndex
- 转换为 Array((0, "a"), (1, "b"), (2, "c"))
对于所有集合(您可以这样查看 Array
),您可以使用 returns 新集合的不可变 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
。
val ys = collection.mutable.Buffer(6, 5, 4, 3)
ys.remove(2)
ys // ArrayBuffer(6, 5, 3)
实现此目的的一种补充方法是围绕索引取舍:
val filteredElem = elem.take(k) ++ elem.drop(k+1)
使用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)
}
使用 a 进行理解,
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
。