String 如何制作比较字符串的函数?
我想做一个比较字符串的函数。 我不想使用相等运算符(=),我希望它只适用于Swift语言 首先,我创建了一个函数,它接受2个字符串,并返回bool类型。 然后我在语法中用for循环这些字符串。 要比较这些字符,如果字符串的值相等,它应该返回true,如果不是,则返回false。还有更好的办法吗String 如何制作比较字符串的函数?,string,function,swift,compare,String,Function,Swift,Compare,我想做一个比较字符串的函数。 我不想使用相等运算符(=),我希望它只适用于Swift语言 首先,我创建了一个函数,它接受2个字符串,并返回bool类型。 然后我在语法中用for循环这些字符串。 要比较这些字符,如果字符串的值相等,它应该返回true,如果不是,则返回false。还有更好的办法吗 func isEqual(str1:String, str2:String) -> Bool { var result = false for char in str1 {
func isEqual(str1:String, str2:String) -> Bool {
var result = false
for char in str1 {
}
for char2 in str2 {
}
//Compare characters.
return result
}
=
可以在Swift中处理字符串。出于教育目的
(正如我从你的评论“因为我在练习……”中得出的结论)
您可以将其实现为:
func myStringCompare(str1 : String, str2 : String) -> Bool {
if count(str1) != count(str2) {
return false
}
for (c1, c2) in zip(str1, str2) {
if c1 != c2 {
return false
}
}
return true
}
zip(str1,str2)
从给定的
序列,这是枚举字符串的方便方法
“并行”
一旦你了解了它的工作原理,你就可以缩短它,
例如:
func myStringCompare(str1 : String, str2 : String) -> Bool {
return count(str1) == count(str2) && !contains(zip(str1, str2), { $0 != $1 })
}
比较字符串长度是必要的,因为zip()
序列
当其中一个字符串用尽时终止。看看
@德雷瓦格的回答
对于另一种Zip2WithNilPadding
序列
如果您不想使用内置的zip()
函数(同样适用于
教育/自学目的!)然后你可以使用事实
字符串是序列,并使用
序列发生器。这不仅适用于字符串,而且适用于
对于任意序列,只要底层元素可以
测试是否相等,因此让我们将其作为通用函数:
func mySequenceCompare<S : SequenceType where S.Generator.Element : Equatable>(lseq : S, rseq : S) -> Bool {
var lgen = lseq.generate()
var rgen = rseq.generate()
// First elements (or `nil`):
var lnext = lgen.next()
var rnext = rgen.next()
while let lelem = lnext, relem = rnext {
if lelem != relem {
return false
}
// Next elements (or `nil`):
lnext = lgen.next()
rnext = rgen.next()
}
// Are both sequences exhausted?
return lnext == nil && rnext == nil
}
=
可以在Swift中处理字符串。出于教育目的
(正如我从你的评论“因为我在练习……”中得出的结论)
您可以将其实现为:
func myStringCompare(str1 : String, str2 : String) -> Bool {
if count(str1) != count(str2) {
return false
}
for (c1, c2) in zip(str1, str2) {
if c1 != c2 {
return false
}
}
return true
}
zip(str1,str2)
从给定的
序列,这是枚举字符串的方便方法
“并行”
一旦你了解了它的工作原理,你就可以缩短它,
例如:
func myStringCompare(str1 : String, str2 : String) -> Bool {
return count(str1) == count(str2) && !contains(zip(str1, str2), { $0 != $1 })
}
比较字符串长度是必要的,因为zip()
序列
当其中一个字符串用尽时终止。看看
@德雷瓦格的回答
对于另一种Zip2WithNilPadding
序列
如果您不想使用内置的zip()
函数(同样适用于
教育/自学目的!)然后你可以使用事实
字符串是序列,并使用
序列发生器。这不仅适用于字符串,而且适用于
对于任意序列,只要底层元素可以
测试是否相等,因此让我们将其作为通用函数:
func mySequenceCompare<S : SequenceType where S.Generator.Element : Equatable>(lseq : S, rseq : S) -> Bool {
var lgen = lseq.generate()
var rgen = rseq.generate()
// First elements (or `nil`):
var lnext = lgen.next()
var rnext = rgen.next()
while let lelem = lnext, relem = rnext {
if lelem != relem {
return false
}
// Next elements (or `nil`):
lnext = lgen.next()
rnext = rgen.next()
}
// Are both sequences exhausted?
return lnext == nil && rnext == nil
}
我的解决方案有一点不同,因为我不知道zip操作符,我想它不如Martin的一篇关于元组的文章有效 大问题阿方斯
func isEqual(str1:String, str2:String) -> Bool {
if count(str1) != count(str2){
return false
}
for var i = 0; i < count(str1); ++i {
let idx1 = advance(str1.startIndex,i)
let idx2 = advance(str2.startIndex,i)
if str1[idx1] != str2[idx2]{
return false
}
}
return true
}
func-isEqual(str1:String,str2:String)->Bool{
如果计数(str1)!=计数(str2){
返回错误
}
对于变量i=0;i
正如Martin所指出的,每个字符串都需要自己的索引,正如他所解释的:
“诀窍”是“我的解决方案有一点不同,因为我不知道zip操作符,我想它不如Martin的一篇文章“使用了元组” 大问题阿方斯
func isEqual(str1:String, str2:String) -> Bool {
if count(str1) != count(str2){
return false
}
for var i = 0; i < count(str1); ++i {
let idx1 = advance(str1.startIndex,i)
let idx2 = advance(str2.startIndex,i)
if str1[idx1] != str2[idx2]{
return false
}
}
return true
}
func-isEqual(str1:String,str2:String)->Bool{
如果计数(str1)!=计数(str2){
返回错误
}
对于变量i=0;i
正如Martin所指出的,每个字符串都需要自己的索引,正如他所解释的:
“诀窍”是“为什么你不想使用
==
?你说的“我希望它只适用于Swift语言”是什么意思?@ABakerSmith因为我在练习…@Martin R我的意思是我不想使用诸如“NSComparisonResult”之类的词。我只想使用Swift基本语法。你为什么不想使用=
?你说的是什么意思“我希望它只适用于Swift语言”?@ABakerSmith,因为我正在练习…@Martin R我的意思是我不想使用诸如“NSComparisonResult”之类的用法。我只想使用Swift基本语法。你不能将从str1
创建的idx
与另一个字符串str2
一起使用。试试isEqual(“非常诡计,我尝试了几个不同的选项,但我没有使用表情符号,谢谢我会更新它现在它工作:)–诡计是“区域指标”“谢谢@MartinR,学习一些新的东西,可以避免在网络中很难找到的bugfuture@alphonse它也帮助了我,老实说,提出这个代码并不是一件小事,最后我学到了一个新的关于字符串的想法,我不知道你不能将从str1
创建的idx
与另一个字符串str2
一起使用。尝试isEqual(“非常诡计,我尝试了几个不同的选项,但我没有使用表情符号,谢谢,我会更新它现在它起作用了:)–诡计是“区域指示器”“谢谢@MartinR刚刚学到一些新东西,可以避免在future@alphonse它也帮助了我,老实说,提出这段代码并不是一件小事,最后我学到了这个新的关于字符串的思考,我不知道这是一个很好的教训!!它真的帮助我理解了斯威夫特。我还尝试将这些字符放入一个新数组,并比较数组中的每个项目。:)谢谢你。thnkas Martin给我上了一堂很好的课!!它真的帮助我理解了斯威夫特。我还尝试将这些字符放入一个新数组,并比较数组中的每个项目。:)非常感谢。