簡體   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