Ruby 到 Scala 的代码转换

标签 ruby scala

我正在将一些代码从 Ruby 转换为 Scala。问题是我一生中从未编写过 Ruby 程序。一切顺利,但现在我遇到了两行我不明白的地方。 如何将最后 2 行 Ruby 代码转换为 Scala?

  num_obs = pop.first[:objectives].size
  num_obs.times do |i|
    min = pop.min{|x,y| x[:objectives][i]<=>y[:objectives][i]}
    max = pop.max{|x,y| x[:objectives][i]<=>y[:objectives][i]}
    /* do sth. with min and max */
  end

pop 是 Vector[Map[String, Any]]

最佳答案

整体|x,y| f(x) <=> f(y)事情似乎只是比较xy通过一些属性(property)f , 和 <=>返回 -1, 0, 1 .如果不提供 compare,同样的事情可以更容易表达。具有返回值的方法 -1, 0, 1 ,我们简单地通过 f 进行比较.在 Scala 中,这类似于:

val pop: Vector[Map[String, Any]] = ???
val num_obs: Int = ???
for (i <- 0 until num_obs) {
  val min = pop.minBy(_("objectives").asInstanceOf[Vector[Int]](i))
  val max = pop.maxBy(_("objectives").asInstanceOf[Vector[Int]](i))
  /* do sth. with min and max */
}

请注意,我已经替换了符号 :objectives通过字符串,即使 Scala 也有 Symbol -type(对应的符号为 'objectives )。我还假设 map 中的值类似于整数向量(否则使用 i 进行索引没有任何意义)。

关于Ruby 到 Scala 的代码转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50311405/

相关文章:

ruby - 如何执行在捕获输出时以彩色打印但也可以在 Ruby 中取消的系统命令?

ruby-on-rails - 字符串 block (<<-BLOCK, param1, param2) 上的参数是什么意思?

java - 收到此错误 "cannot access scala.reflect.api.TypeTags"

sql - Slick 2 - 更新表中的列并返回整个表对象

java - 运行 Lagom hello-world 示例时出错

ruby - 获取包含文本的 webdriver 中的特定元素

ruby-on-rails - 如何用 ruby 安全地用下划线替换所有空格?

ruby-on-rails - Heroku ruby​​ buildpack 错误 - 未定义的局部变量或方法 `install_language_pack_gems'

scala - 如何在scala中对相邻元素求和

scala - 对测试用例进行分组或规范 2 中的 "shared_examples_for"等效项