[英]Swift4 convert specific string to specific Int
就像我的问题标题一样。
如果我得到A,我想返回0。
如果我得到B,我想返回1。
....
如果我得到Z,我想返回25。
如何使此功能看起来更好和更容易? 谢谢。
func convertStringToInt(text: String) -> Int {
switch text {
case "A":
return 0
case "B":
return 1
//...C TO Y
case "Z":
return 25
default:
break
}
return 0
}
使用ASCII值,您可以将其缩短为此(也适用于小写字母):
func convertStringToInt(characterText: String) -> Int? {
guard let aValue = "A".unicodeScalars.first?.value,
let zValue = "Z".unicodeScalars.first?.value,
let characterValue = characterText.uppercased().unicodeScalars.first?.value,
// next line tests if the input value is between A and Z
characterValue >= aValue && characterValue <= zValue else {
return nil // error
}
return Int(characterValue) - Int(aValue)
}
print("Value for A: \(convertStringToInt(characterText: "A"))")
print("Value for G: \(convertStringToInt(characterText: "G"))")
print("Value for Z: \(convertStringToInt(characterText: "Z"))")
print("Value for z: \(convertStringToInt(characterText: "z"))")
print("Value for ^: \(convertStringToInt(characterText: "^"))")
印刷品:
Value for A: Optional(0)
Value for G: Optional(6)
Value for Z: Optional(25)
Value for z: Optional(25)
Value for ^: nil
基于这个问题 。
或者,如果您想使用数组索引:
func convertStringToInt(characterText: String) -> Int {
let array = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
return array.firstIndex(of: characterText.uppercased()) ?? -1 // default value for a text that is not found
}
首先,您的函数对于A
和无效字符都返回0,这肯定不是故意的。
此解决方案考虑范围AZ中的所有大写字母,并在失败时返回nil
func convertStringToInt(text: String) -> Int? {
guard let scalar = UnicodeScalar(text), 65..<91 ~= scalar.value else { return nil }
return Int(scalar.value) - 65
}
要同时考虑小写字符,请使用switch
语句
func convertStringToInt(text: String) -> Int? {
guard let scalar = UnicodeScalar(text) else { return nil }
let value = Int(scalar.value)
switch value {
case 65..<91: return value - 65
case 97..<123: return value - 97
default : return nil
}
}
我是一名高中生,也是Swift的新手,我解决问题的方式并不是最有效的方法,但我希望它能给您带来新的见解
func convertStringToInt(text: String)-> Int {
let stringarray=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
var defaultvalue = -1
var value = -1000000
for i in stringarray{
defaultvalue+=1
if text==i{
value=defaultvalue
}
}
return value
}
-1000000只是无效输入的值,由于人们已经这样做了,所以我没有在该代码中使用ASCLL代码,但是使用ASCLL代码将是最正确的方式,并且也更容易识别小写和大写
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.