小编Pho*_*oen的帖子

在 Scala 中以函数方式迭代表填充 2 个 HasSet

我正在编写一个 Scala 应用程序,并试图以一种功能方式遍历一个表(以二维数组的形式)。对于表中的每一行,我想用第一列中的所有不同值填充一个集合,并用第二列中的所有不同值填充第二个集合。

我尝试了很多方法,但找不到任何解决方案如何以功能风格来做到这一点。因为我从迭代中获得了 2 个新变量,如果没有非功能性帮助,这似乎是不可能的。

这是一个非功能性示例,其中包含用于包含产品和客户的表的可变 HashSet:

val myInputTable =
  Array(Array("Product A","Customer 1"), Array("Product B","Customer 1"),
    Array("Product C","Customer 2"), Array("Product A","Customer 2"))

val productSet = new collection.mutable.HashSet[String]
val customerSet = new collection.mutable.HashSet[String]

for(
  inputLine <- myInputTable;
  inputElement <- inputLine
) {
  if (inputLine.indexOf(inputElement) == 0) {
    productSet.add(inputElement)
  } else {
    customerSet.add(inputElement)
  }
}

println("Product Set:")
productSet.foreach(println)
println("\nCustomer Set:")
customerSet.foreach(println) 
Run Code Online (Sandbox Code Playgroud)

有没有办法用不可变的集合、其他对象或者 for-yield 语法来做到这一点?

感谢您的任何答案或提示,

菲利克斯

functional-programming scala

5
推荐指数
1
解决办法
68
查看次数

如何避免在循环中分配的var

我正在Scala程序中遍历命令行输入参数,并希望在循环中设置几个变量。我的问题是我正在使用var。

我不想使用大型库来执行此任务,我想使其保持简单。参数包含简单的键值对(例如“ -v myVar”),这就是为什么我尝试使用滑动功能的原因。可能不是设置val的最佳选择。

object Main {
  def main(args: Array[String]): Unit = {
    // args: Array("-c", "myFile", "-j", "update", "-d", "debugPath")

    var config: String = null
    var jobType: String = null
    var debug: String = null

    args.sliding(2,2).toList.collect {
      case Array("-c", argProperty: String) => config = argProperty
      case Array("-j", argJobType: String) => jobType = argJobType
      case Array("-d", argDebug: String) => debug = argDebug
    }

    println("Config: " + config)
    println("Job type: " + jobType)
    println("Debug: " + debug)
  }
}
Run Code Online (Sandbox Code Playgroud)

代码可以编译并提供正确的输出,但是3个var并不是很好。但是,我找不到在循环外声明3 val的解决方案。

loops scala

4
推荐指数
1
解决办法
51
查看次数

标签 统计

scala ×2

functional-programming ×1

loops ×1