【问题标题】:Scala code changes for algorithm算法的 Scala 代码更改
【发布时间】:2015-12-11 10:55:40
【问题描述】:

我有以下 Scala 代码,其中 z 表示字符串数组,每个字符串表示数据集的一个数据点。
第一步是计算数据集中第一个字符串与数据集中所有其他字符串之间的匹配分数,然后将所有相似的字符串存储在一个集合中。
第二步是计算在第一步中不匹配的第二个字符串与数据集中所有其他不匹配字符串的匹配分数。
第三步和后续步骤与前面的步骤类似。

最重要的是我必须注意,在上述过程中匹配的所有字符串都不会参与进一步的循环,因为它们在前面的步骤中已经匹配。
建议更改代码,以满足我的上述所有要求。

val z = y.split("\n")       // z is Array[String]

for (i <- 1 to 500)
{

var str = ArrayBuffer[String]()
   str += z(i)

 for(j <- 1 to 500)
 {         

   val dist = match(z(i),z(j))  // match calculates score between 2 strings 

    if (dist < threshold){

        str += z(j)     
 }
}

【问题讨论】:

  • 您可能想尝试使用 codereview.stackexchange 获取“建议”
  • @ShreyansSheth 代码审查不提供更改代码工作方式的建议,它只是用于审查已经按预期工作的代码。

标签: arrays string algorithm scala


【解决方案1】:

一种可以传达预期语义的 Scalish 方法,像这样

val xs = y.split("\n")
val res = 
  for { zi <- xs
        zj <- xs
        if score(zi,zj) < threshold
      }
  yield zj

res.mkString

即,对于 splat 字符串中的每个zi 和每个zj,过滤那些得分小于threshold 的对,然后从每对中产生第二个项目。

请注意,这不需要索引引用或可变集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2023-03-20
    • 2011-09-27
    • 2011-02-26
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多