相关疑难解决方法(0)

Scala:var List vs val MutableList

在Odersky等人的Scala书中,他们说使用列表.我没有阅读书籍封面,但所有的例子似乎都使用了val List.据我所知,人们也鼓励在vars上使用vals.但是在大多数应用程序中,使用var List或val MutableList之间没有权衡.显然我们可以使用val List.但是使用大量var列表(或var Vectors等)是一种好习惯吗?

我对来自C#的Scala很新.那里我有很多:

public List<T> myList {get; private set;}
Run Code Online (Sandbox Code Playgroud)

如果C#内置不变性,很容易被声明为val的集合,因为集合本身在构造之后从未改变过,即使元素在其生命周期中被添加和减去.因此,声明var集合几乎感觉就像离不变性一样.

作为对答案和评论的回应,Scala的一个强大卖点是:它可以有许多好处,而不必像Lisp或Haskell那样完全改变编写代码的方式.

collections scala immutability

13
推荐指数
2
解决办法
5102
查看次数

Scala在迭代时更新地图中的值

我正在尝试在更新此映射[String,WordCount]中的值

case class WordCount(name: String,
                 id: Int,
                 var count: Double,
                 var links: scala.collection.mutable.HashMap[String, Double],
                 var ent: Double) {

    def withEnt(v: Double): WordCount = {println(s"v: $v"); copy(ent = v)}
}

var targets = mutable.HashMap[String, WordCount]()
Run Code Online (Sandbox Code Playgroud)

函数calEnt是:

def calEnt(total: Double, links: scala.collection.mutable.HashMap[String, Double]): Double = {
    var p: Double = 0.0
    var ent: Double = 0.0
    links.map(d => {
      p = d._2 / total
      ent -= p * Math.log(p)
    })
    return ent
  }
Run Code Online (Sandbox Code Playgroud)

我正在使用:

targets.map(m => m._2.withEnt(calEnt(m._2.count, m._2.links)))
Run Code Online (Sandbox Code Playgroud)

用于迭代地图并计算的新值ent并使用进行更新withEnt …

scala map

2
推荐指数
1
解决办法
4486
查看次数

标签 统计

scala ×2

collections ×1

immutability ×1

map ×1