繁体   English   中英

如何使用Swift将NSArray转换为[Int]

[英]How to convert NSArray to [Int] with Swift

我的问题很简单,

let string = "1,2,3,4,5,6"

因为我想在字符串中找到最大值,并且我想以这种方式使用方法,所以我需要这样做:

let array = string.componentsSeparatedByString(",") as [AnyObject]
let numArray = array as! [Int]
let maxNum = numArray.reduce(Int.min, combine: {max($0,$1)})  

但是,“ array as![Int] ”中会出现错误。

fatal error: array cannot be bridged from Objective-C

如果是

let numArray = array as! [String]

可以,但是我们不能使用reduce方法。

那么,如何将带有字符串的数组转换为[Int]?

你可以映射数组

let string = "1,2,3,4,5,6"
let numArray = string.componentsSeparatedByString(",").map {$0.toInt()!}

您可以使用reduce和optionals,以防止使用强制展开,如果字符串实际上不包含数字,则可能导致应用程序崩溃。

这是代码:

let array = string.componentsSeparatedByString(",")

let initial: Int? = .None
let max = array.reduce(initial) {
    let num = $1.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).toInt()

    return num > $0 ? num : $0
}

第一行将字符串拆分为字符串数组-请注意,由于该方法已经返回字符串数组,因此无需强制转换。

通过传递一个可选的整数作为初始值(设置为.None (这是nil的同义词))来使用reduce方法。

传递给reduce的闭包使用toInt()将当前值转换为整数,该整数返回一个可选值,以解决无法转换为有效整数的字符串的问题。

接下来,如果闭包大于上一次迭代计算的值(或大于初始值),则闭包将返回转换后的数字,否则它将返回上一次迭代的值。

请注意,比较整数和nil是完全合法的:任何整数值始终大于nil (甚至是负值)。

此方法适用于“普通”数字列表:

let string = "1, 2, 3, 4, 5, 6, 7" // The result is 7

而且还包含具有数字和非数字的列表:

let string = "1, 2, three, 4, 5, 6, seven" // the result is 6

并包含不包含数字的列表:

let string = "one, two, three, three, four, five, six, seven" // the result is nil
let string = "1,2,3,4,5,6"

func toInt(str: String) -> Int {
    return str.toInt()!
}

let numArray = map(string.componentsSeparatedByString(",") as [String], toInt)

然后, numArray[1, 2, 3, 4, 5, 6]

Swift 2.0中

let string = "1,2,3,4,5,6"
let numArray = string.componentsSeparatedByString(",").map{ Int($0)! }

在Swift 4.0中:

let string = "1,2,3,4,5,6"
let stringArray = string.split(separator: ",").map(String.init)
let intArray = stringArray.flatMap(Int.init)
intArray.max()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM