如何循环设置并使用新值分配集合中的每个项目?

时间:2012-12-02 19:56:10

标签: scala

您好我想循环一组字符串并将它们从String类型转换为ObjectId类型。

我试过这种方式:

followingIds.foreach(e => e = new ObjectId(e))

但是我不能这样做。

我也尝试使用“for”但我不知道如何访问Set by Index的每个位置。

for (i <- 0 until following.size) {
   following[i] = new ObjectId(following[i])
}

这既不起作用,

任何人都可以帮助我吗?!?请!

2 个答案:

答案 0 :(得分:12)

如果你坚持可变性,可以选择以下内容:

var followingIds = Set("foo", "bar")
followingIds = followingIds.map(e => new ObjectId(e))

但是你可以用不可变的东西使你的代码变得更加狡猾:

val followingIds = Set("foo", "bar")
val objectIds = followingIds.map(e => new ObjectId(e))

现在变量(值)名称非常具有描述性

答案 1 :(得分:0)

Java的1.4状?

val mutableSet: collection.mutable.Set[AnyRef] = collection.mutable.Set[AnyRef]("0", "1", "10", "11")
//mutableSet: scala.collection.mutable.Set[AnyRef] = Set(0, 1, 10, 11)

for (el <- mutableSet) el match { 
  case s: String  => 
    mutableSet += ObjectId(s)
    mutableSet -= s
    s
  case s => s
}

mutableSet
//res24: scala.collection.mutable.Set[AnyRef] = Set(ObjectId(0), ObjectId(11), ObjectId(10), ObjectId(1))