scala:优化方法:字符串比较

scala:优化方法:字符串比较,scala,Scala,这是一段代码。我的问题很简单。 在scala中是否有更复杂的方法来实现这一点 如果字符串仅与一个字符不同,则应返回true。 i、 e.“cat”和“cot”应为真 def Compare(s1: String, s2: String) : Boolean = { val sArray : scala.collection.immutable.IndexedSeq[Char] = s1.map(_.toChar) var matchNumber :

这是一段代码。我的问题很简单。 在scala中是否有更复杂的方法来实现这一点

如果字符串仅与一个字符不同,则应返回true。 i、 e.“cat”和“cot”应为真

      def Compare(s1: String, s2: String) : Boolean = {

       val sArray : scala.collection.immutable.IndexedSeq[Char] = s1.map(_.toChar)

        var matchNumber : Int = 0
        var notFound : Int = 0

        sArray.foreach( (c:Char) =>{ 
            c match {
                case x if s2.indexOf(x) >= 0 =>  matchNumber += 1
                case _ => notFound += 1
            }

        }); 

        matchNumber + notFound == s1.length && notFound > 0
    }

下面是一个更简短、更惯用的版本:

def compare(s1: String, s2: String) : Boolean = {
   s1.length == s2.length && (s1.zip(s2).count { case (c1, c2) => c1 == c2 } >= s1.length -1)
}
例如:

println(compare("same", "same")) // true
println(compare("same", "sDme")) // true
println(compare("same", "sam"))  // false
println(compare("same", "sDDe")) // false

下面是一个更简短、更惯用的版本:

def compare(s1: String, s2: String) : Boolean = {
   s1.length == s2.length && (s1.zip(s2).count { case (c1, c2) => c1 == c2 } >= s1.length -1)
}
例如:

println(compare("same", "same")) // true
println(compare("same", "sDme")) // true
println(compare("same", "sam"))  // false
println(compare("same", "sDDe")) // false

不确定我是否理解-应该“cat”和“ca”返回true还是false?字符串是否应该具有相同的长度以生成“true”?是的,应该具有相同的长度!如前所述,您已经说过“如果字符串仅与一个字符不同,则返回true。”。那么,如果字符串相同,它应该返回false吗?是的,它应该不同,只有一个字符,长度必须相同。我不确定我是否理解,“cat”和“ca”应该返回true还是false?字符串是否应该具有相同的长度以生成“true”?是的,应该具有相同的长度!如前所述,您已经说过“如果字符串仅与一个字符不同,则返回true。”。那么,如果字符串相同,它是否应该返回false呢?是的,它应该不同,只有一个字符,长度必须相同。请给出一些背景:这里要记住的三个关键Scala概念是:(1)在Scala中,字符串可以隐式转换为
char
s序列(这很酷);(2) Scala集合有一个
zip
方法来将每个元素与另一个集合中同一索引处的元素相匹配,(3)总是喜欢不可变的实现,而不是惯用的实现,因为失败时总是走得很长。另外,更喜欢
zipped
(s,t)。zipped.forall{case(x,y)=>x==y}
(0到s.length)forall(i=>s.charAt(i)==t.charAt(i))
会问一些愚蠢的问题。什么是“惯用语”?算法类型?摘自维基百科:“惯用的:属于或符合一种语言的表达方式特征的”。在这种情况下,惯用Scala指的是以Scala所期望和推广的风格和形式编写的代码,这意味着正确使用了不变性、纯函数、最小化副作用等概念。仅提供一些背景:这里要记住的三个关键Scala概念是(1)在Scala中,字符串可以隐式转换为
Char
s序列(这很酷);(2) Scala集合有一个
zip
方法来将每个元素与另一个集合中同一索引处的元素相匹配,(3)总是喜欢不可变的实现,而不是惯用的实现,因为失败时总是走得很长。另外,更喜欢
zipped
(s,t)。zipped.forall{case(x,y)=>x==y}
(0到s.length)forall(i=>s.charAt(i)==t.charAt(i))
会问一些愚蠢的问题。什么是“惯用语”?算法类型?摘自维基百科:“惯用的:属于或符合一种语言的表达方式特征的”。在这种情况下,惯用的Scala意味着以Scala所期望和推广的风格和形式编写的代码,这意味着正确使用诸如不变性、纯函数、最小化副作用等概念。