scala - 在 Scala 中使用带有 Int 的 "or"运算符

标签 scala

我需要将数据拆分成列。空格必须分布在最后几列中。因此,如果我有四个元素和三列,则这些列将包含这些元素数:2、1 和 1。

我需要知道有多少列将被填满。答案是:

val full = data.length % NUMBER_OF_COLUMNS

问题在于项目数是列数的倍数,这将返回零,这不是我想要的。所以我可以做:

val full = if (data.length % NUMBER_OF_COLUMNS == 0) NUMBER_OF_COLUMNS else 
  data.length % NUMBER_OF_COLUMNS

这行得通,但感觉不是很“像 Scala”。这绝对是冗长和笨拙的,余数操作需要存储或执行两次。 (在这里,我选择了后者。)

有没有更好的办法?

在 Python 中,我所做的基本上是将 or 运算符与 Int 一起使用,如下所示:

full = len(data) % NUMBER_OF_COLUMNS or NUMBER_OF_COLUMNS

完成。但我想不出 Scala 中有类似的东西。它不存在还是我根本没有看到它?

最佳答案

像这样使用模式匹配

len % nCols match {
  case 0 => nCols
  case v => v
}

请注意,第二个模式匹配任何(非零)值并提供已计算的模值。

关于scala - 在 Scala 中使用带有 Int 的 "or"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34209752/

相关文章:

scala - 聚合多个参与者的响应?

scala - 右结合三冒号运算符

string - 使用 Scala 如何找出字符串中是否存在字符列表,其中是否存在重复字符?

scala - Akka Actor : Remote actor exception "Futures timed out after"

java - Java 中的 Scala 元组类型推断

Scala while(true) 类型不匹配? scala 中的无限循环?

scala - lift 的 sbt unmanagedClasspath 条目已编译但在运行时未找到

java - Scala 和进程中的内存泄漏

eclipse - Scala Eclipse 插件不显示鼠标悬停文档

scala - 使用 Play 2 框架的基于 token 的身份验证