在这个例子中,我正在创建一个新的Int
空数组,我想将其他数组中的某些字符添加到其中。最初,在我的characters
数组中,我存储数字["1","","2","","3"]
并且在这个数组中(我可能这样做完全错了)我想迭代这些数字以生成一个newarray
,这将有这些数字[1,2,3]
(基本上删除其间的空格并使其类型为Int
)
据我了解,我创建了一个动态数组,即没有特定的大小,但我收到此错误:fatal error: Array index out of range
我不知道为什么。有人可以为我澄清一下吗?感谢
do{
var data = try String(contentsOfFile: documentsDirectoryPath as String,
encoding: NSASCIIStringEncoding)
print(data)
let characters = Array(data.characters)
print(characters)
var newarray = [Int]()
for var index = 0; index <= characters.count ; ++index {
if characters[index] == " " {
index++
}
else{
newarray[index] = index
}
}
print(newarray)
}
catch{
print("error")
}
}
答案 0 :(得分:2)
根据您在此主题中的其他评论,您可能会尝试从类似"1, 2, 3"
的字符串中过滤掉空格和逗号。如果这是错误的,请纠正我。对此的完全 swifty 解决方案如下:
do {
var data = try String(contentsOfFile: documentsDirectoryPath as String, encoding: NSASCIIStringEncoding)
print(data)
let newarray = data.characters.filter { Int(String($0)) != nil }.map { Int(String($0))! }
} catch {
print("error")
}
filter
将返回一个转换为整数的Character
数组。然后map
将获取该数组,然后将每个元素转换为整数。我们必须将Character
转换为String
类型,因为没有Int
构造函数需要Character
。
答案 1 :(得分:1)
您的代码中存在多个问题,其中最重要的是您的方法不正确,因为它将字符串视为单个字符的集合,而您的问题则需要解析多位数字。
更好的方法是在逗号上拆分数组,并从修剪后的结果中解析整数,如下所示:
let data = "12, 23, 345"
print(data)
let newarray = data.characters.split(){$0 == ","}.map{
Int(String.init($0).stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()))!
}
print(newarray) // 12, 23, 345
答案 2 :(得分:0)
这是因为您的newarray
没有容量。
尝试使用append
方法或创建具有如下容量的数组:
let newarray = [Int](count:charactes.count, repeatedValue: 0)
。
P.S。还要注意你在for循环中有错误,你应该使用<
而不是<=
并且在循环中使用迭代器值是一个坏主意,当你看到一个空格时,你将这个变量增加两次,你确定这是有意的吗?
你在Swift中使用了两种不好的做法。首先,使用类似C的for循环,它将在Swift 3中删除。++
运算符也是如此。他们也将被删除。
改为使用for-in
和+=
。这将使你的代码更加迅捷。
答案 3 :(得分:0)
根据你在评论中说的内容(你想从数组中删除空格字符并获取新的字符),你可以这样实现:
let newarray = characters.filter { $0 != " " }
答案 4 :(得分:0)
另一种方法:
首先删除String
中的所有空格,然后将其转换为Array
:
let trimmedData = data.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
let characters = Array(trimmedData.characters)
编辑:如果您只想保留数字:
let validNumbers = "1234567890"
let validSet = NSCharacterSet(charactersInString: validNumbers)
let trimmedData = data.stringByTrimmingCharactersInSet(validSet)
let characters = Array(trimmedData.characters)
答案 5 :(得分:0)
更改此行:
for var index = 0; index <= characters.count ; ++index {
到这一个:
for var index = 0; index < characters.count ; ++index {