【发布时间】:2014-01-24 06:36:13
【问题描述】:
我对 Scala 和整个函数式编程风格非常陌生。我需要做的是通过比较两个单词的每个字母来计算两个字符串之间的相似度。该函数将用于相同长度的单词。
例如,“network”和“workout”的相似度为 1。“House”和“Mouse”的相似度为 4。
以下是我将如何以非常老式的 C# 方式进行操作:
int calculateCharSimilarity(string first, string second)
{
int similarity = 0;
for(int i = 0; i < first.lenght() && i < first.lenght(); i++)
{
if(first.charAt(i) == second.charAt(i))
similarity++;
}
return similarity;
}
到目前为止,我在 scala 中所做的是编写一个尾递归函数以避免循环:
@tailrec
private def calculateCharSimilarity(first: Seq[Char], second: Seq[Char], similarity: Int = 0): Int = {
if(first != Nil && second != Nil)
calculateCharSimilarity(first.tail, second.tail, if(first.head == second.head) similarity + 1 else similarity)
else
similarity
}
但我不太确定这是否是 Scala 中的最佳实践。例如,有没有什么方法可以让 Collection Combinators (zip, filter) 更优雅?
【问题讨论】:
标签: scala loops collections