例如我有一个类似的数组:
var array = [" Hello"," World"," 1" ," 2"]
如何将其拆分为2个阵列?一个具有字符串值,一个具有类似
的int值arrayStr = [" Hello"," World"]
数组Int = [" 1"," 2"]
答案 0 :(得分:4)
您可以过滤字符串是否可用于创建int:
let array = ["Hello", "World", "1" , "2"]
let intArray = array.filter { (string) -> Bool in
return Int(string) != nil
}
如果没有,则将其视为字符串
let stringArray = array.filter { (string) -> Bool in
return Int(string) == nil
}
结果:
print(stringArray)
print(intArray)
将打印
["Hello", "World"]
["1", "2"]
如果intArry确实应该。包含Ints,而不是表示Int的字符串,您可以使用map。
let intArray = array.filter { (string) -> Bool in
return Int(string) != nil
}.map { return Int($0)!}
缩短代码:
let array = ["Hello", "World", "1" , "2"]
let stringArray = array.filter { Int($0) == nil }
let intArray = array.flatMap (Int.init)
答案 1 :(得分:1)
一次性解决方案,您可以这样做:
var intArray = [Int]()
var stringArray = [String]()
array.forEach {
if let integer = Int($0) {
intArray.append(integer)
} else {
stringArray.append($0)
}
}
print(intArray) // [1, 2]
print(stringArray) // ["Hello", "World"]
我们在这里所做的就是创建了2个空数组,一个用于Int
,另一个用于String
。
然后我们迭代主数组的值,如果我们能够将值转换为Int
,那么它是Int
,我们应该将其添加到intArray
。如果没有,我们会将其添加到stringArray
。
答案 2 :(得分:0)
这是通过仅检查条件一次来实现此目的的方法。它使用reduce
将数组拆分为两个数组。
let sepArray = array.reduce(([String](), [Int]()), {
if let int = Int($1) {
return ($0.0, $0.1 + [int])
} else {
return ($0.0 + [$1], $0.1)
}
})
sepArray //(["Hello", "World"], [1, 2])
您也可以使用此功能。对于此方法,您传递的条件是尝试将元素映射到新类型。它将条件返回的每个元素都移动到第二个数组中。
extension Array {
func separateElements<T>(where condition: (Element) -> T?) -> ([Element], [T]) {
return self.reduce(([Element](), [T]()), {
if let elementToSeparate = condition($1) {
return ($0.0, $0.1 + [elementToSeparate])
} else {
return ($0.0 + [$1], $0.1)
}
})
}
}
你可以这样使用它。
array.separateElements(where: { Int($0) }) //(["Hello", "World"], [1, 2])
答案 3 :(得分:-1)
试试这个并查看:使用loop
if-let
或if-is
条件来识别数组元素的数据类型并附加到相关数组中。
以下是测试示例:
let array = ["Hello", "World ", "1" , "2"]
var arrayStr = [String]()
var arrayInt = [Int]()
for arrayElement in array {
if let intValue = Int(arrayElement) {
arrayInt.append(intValue)
} else {
arrayStr.append(arrayElement)
}
}
print("arrayStr - \(arrayStr)")
print("arrayInt - \(arrayInt)")
<强>结果:强>
arrayStr - [“你好”,“世界”]
arrayInt - [1,2]