从mutable.Buffer中删除选项

时间:2017-08-02 07:28:09

标签: scala collections

headOption方法返回集合头部的Option[T]

我希望有removeOption(n: Int)之类的东西返回并删除第n个元素,如果它在集合的范围内,否则什么都不做并返回None

我可以通过模式匹配来实现,但这看起来太乱了。也许implicit class es会对你有帮助吗?

Actualyl我试过这个:

 implicit class RemoveOptionImplicit[A](val t: mutable.Buffer[A]) extends AnyVal {
    def removeOption(index: Int) =
      if(index >= 0 & index < t.size)
        Some(t.remove(index))
      else
        None
  }

但不确定这是不是一个好方法。

1 个答案:

答案 0 :(得分:4)

这个怎么样?

import scala.util.Try
def safeRemove[A](mb: collection.mutable.Buffer[A], idx: Int): Option[A] =
  Try(mb.remove(idx)).toOption

如果索引很好,它有变异Buffer的恶劣副作用,但我认为这就是你所要求的。

如果您不想处理异常,那么您的原始想法可以简化为这样。

def safeRemove[A](mb: collection.mutable.Buffer[A], idx: Int): Option[A] =
  if (mb.isDefinedAt(idx)) Option(mb.remove(idx))
  else None

当然,通过隐式转换对mutable.Buffer方法进行拉伸操作总是有可能的。