Arrays 如何在Swift中转换整数数组中的字符串(数字)

Arrays 如何在Swift中转换整数数组中的字符串(数字),arrays,string,swift,int,Arrays,String,Swift,Int,我想知道如何在Swift中转换整数数组中的字符串。 在Java中,我总是这样做: String myString = "123456789"; int[] myArray = new int[myString.lenght()]; for(int i=0;i<myArray.lenght;i++){ myArray[i] = Integer.parseInt(myString.charAt(i)); } String myString=“123456789”; int[]myA

我想知道如何在Swift中转换整数数组中的字符串。 在Java中,我总是这样做:

String myString = "123456789";
int[] myArray = new int[myString.lenght()];
for(int i=0;i<myArray.lenght;i++){
   myArray[i] = Integer.parseInt(myString.charAt(i));
}  
String myString=“123456789”;
int[]myArray=newint[myString.lenght()];
对于(int i=0;i
var myString=“123456789”
var myArray:[Int]=[]

对于0..中的索引,可以使用flatMap将字符转换为字符串,并将字符串强制转换为整数:

Swift 2或3

let string = "123456789"
let digits = string.characters.flatMap{Int(String($0))}
print(digits)   // [1, 2, 3, 4, 5, 6, 7, 8, 9]"
Swift 4

let string = "123456789"
let digits = string.flatMap{Int(String($0))}
print(digits)   // [1, 2, 3, 4, 5, 6, 7, 8, 9]"
Swift 4.1

let digits = string.compactMap{Int(String($0))}
Swift 5或更高版本

我们可以使用新的字符属性
wholeNumberValue

  • map()
    str
  • String($0)
    字符
    转换为
    字符串
  • .toInt()
    String
    转换为
    Int
    。如果失败(
    ),请使用
    0
如果您更喜欢
循环,请尝试:

let str = "123456789"
var intArray: [Int] = []

for chr in str {
    intArray.append(String(chr).toInt() ?? 0)
}
或者,如果要迭代
字符串的索引,请执行以下操作:

let str = "123456789"
var intArray: [Int] = []

for i in indices(str) {
    intArray.append(String(str[i]).toInt() ?? 0)
}

@rintaro的回答是正确的,但我只想补充一点,您可以使用
reduce
删除任何无法转换为
Int
的字符,甚至在出现这种情况时显示警告消息:

let str = "123456789"
let intArray = reduce(str, [Int]()) { (var array: [Int], char: Character) -> [Int] in
    if let i = String(char).toInt() {
        array.append(i)
    } else {
        println("Warning: could not convert character \(char) to an integer")
    }
    return array
}
优点是:

  • 如果
    intArray
    包含零,您将知道
    str
    中有一个
    0
    ,而不是其他一些字符变成了零
  • 如果有一个非
    Int
    字符可能把事情搞砸了,你就会被告知
Swift 3更新:

@appzYourLife:没错,
toInt()
方法不再适用于Swift 3中的字符串。 作为替代方案,您可以做的是:

intArray.append(Int(String(chr)) ?? 0)

将其包含在
Int()中将其转换为Int。

Swift 3

let string = "123456789"
let digits = string.characters.flatMap{Int(String($0))}
print(digits)   // [1, 2, 3, 4, 5, 6, 7, 8, 9]"
整型数组到字符串

let arjun = [1,32,45,5]
    print(self.get_numbers(array: arjun))

 func get_numbers(array:[Int]) -> String {
        let stringArray = array.flatMap { String(describing: $0) }
        return stringArray.joined(separator: ",")
字符串到整数数组

let arjun = "1,32,45,5"
    print(self.get_numbers(stringtext: arjun))

    func get_numbers(stringtext:String) -> [Int] {
    let StringRecordedArr = stringtext.components(separatedBy: ",")
    return StringRecordedArr.map { Int($0)!}   
}
Swift 3:功能方法
  • 使用以下方法将
    字符串
    拆分为单独的
    字符串
    实例:
    组件(由分隔符分隔:String)->[String]
  • Reference:返回一个数组,其中包含字符串中被给定分隔符除的子字符串

  • 使用
    flatMap
    Array
    方法绕过
    nil
    合并,同时转换为
    Int
  • Reference:返回一个数组,其中包含使用此序列的每个元素调用给定转换的非nil结果

    实施

    let string = "123456789"
    let intArray = string.components(separatedBy: "").flatMap { Int($0) }
    

    我正在删除
    java
    标记,因为这个问题实际上不是关于java的。你的循环中有一个循环反复调用
    advance
    ,这是个坏主意,因为你每次都让程序从一开始就一步一步地遍历字符串。谢谢你的帮助!
    toInt()
    在Swift 2.x.Swift 4.1的
    字符串中不再可用。对于此用例,Swift 4.1不推荐
    .flatMap
    。请改用
    .compactMap
    let digits=String.compactMap{Int(String($0))
    Swift 4.1对此用例不推荐使用
    .flatMap
    。相反,请使用
    .compactMap
    让intArray=string.components(以:“”分隔)。compactMap{Int($0)}
    @leanne这是错误的,它将导致一个数组中的单个元素与输入值相同
    [123456789]
    。第一种方法
    组件(以“:”分隔)
    将产生一个字符串元素
    [“123456789”]
    我只是用新的
    .compactMap
    ,@LeoDabus替换了弃用的
    .flatMap
    。这两个结果都是相同的。正如Xcode的调试控制台中打印的:
    [123456789]
    [123456789]
    。请注意,我不是在判断结果是否适用于原始问题,而是简单地对任何来到这里的人说,
    .flatMap
    已经被弃用,取而代之的是
    .compactMap
    ,如果一个人试图获得一个删除
    nil
    值的结果。请不要只发布代码回答,但也要解释你的代码是做什么的,以及它是如何解决问题的。带有解释的答案通常更有帮助,质量更好,并且更有可能吸引选票。
    let arjun = "1,32,45,5"
        print(self.get_numbers(stringtext: arjun))
    
        func get_numbers(stringtext:String) -> [Int] {
        let StringRecordedArr = stringtext.components(separatedBy: ",")
        return StringRecordedArr.map { Int($0)!}   
    }
    
    let string = "123456789"
    let intArray = string.components(separatedBy: "").flatMap { Int($0) }
    
    let array = "0123456789".compactMap{ Int(String($0)) }
    print(array)