scala:优化方法:字符串比较
这是一段代码。我的问题很简单。 在scala中是否有更复杂的方法来实现这一点 如果字符串仅与一个字符不同,则应返回true。 i、 e.“cat”和“cot”应为真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 :
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所期望和推广的风格和形式编写的代码,这意味着正确使用诸如不变性、纯函数、最小化副作用等概念。