2017-02-25 143 views
0
的分割字符串int数组

我试图将字符串分割成的整数数组:斯威夫特3:诠释

let stringNumbers = "1 2 10" 
var arrayIntegers = stringNumbers.characters.flatMap{Int(String($0))} 

但我的问题是,我得到这样的输出:

[1, 2, 1, 0] 

当我应该得到这个输出:

[1, 2, 10] 

我做错了什么?

我真的很感谢你的帮助。

+0

的可能的复制[将字符串转换成一个int数组](http://stackoverflow.com/questions/36765670/converting-a-string-to-an-int-array ) – 2017-02-25 02:40:32

+0

那么你正在将每个单独的字符转换为整数。所有多位数字的数字都被解释为单独的一位数字。 – Alexander

回答

1

使用此

let stringNumbers = "1 2 10" 
let array = stringNumbers.components(separatedBy: " ") 
let intArray = array.map { Int($0)!} // [1, 2, 10] 
+0

小心使用'!'。虽然它不会导致此特定字符串出现问题,但如果字符串实际上包含任何无法转换为数字的文本,它将会崩溃。 – rmaddy

+0

同意rmaddy – 2017-02-25 03:01:34

2

您正在将字符串的单个字符转换为数字。首先是1,然后是空格,然后是2,然后是空格,然后是1,最后是0。如果路线转换空间给出nil与被过滤掉使用flatMap

你可以这样做:

let stringNumbers = "1 2 10" 
var arrayIntegers = stringNumbers.components(separatedBy: " ").flatMap { Int($0) } 

这分裂原字符串到字符串数组(用空格隔开),然后映射那些为整数。

+0

我打印您的解决方案我得到“[可选(1),可选(2),可选(10)]”。我怎样才能打印数组数组? – user2924482

+1

'let arrayIntegers = stringNumbers.components(separatedBy:“”).flatMap {Int($ 0)}' –

+1

@LeoDabus谢谢。更新。在这种情况下,仅仅使用'map'就可以给出一系列可选项。如果字符串包含任何不能转换为数字的文本,则使用'flatMap'将会留下任何'nil'值。 – rmaddy