如何将字符串拆分为2个数组Swift 4

时间:2017-11-30 12:28:55

标签: arrays swift string int swift4

例如我有一个类似的数组:

  

var array = [" Hello"," World"," 1" ," 2"]

如何将其拆分为2个阵列?一个具有字符串值,一个具有类似

的int值
  

arrayStr = [" Hello"," World"]

     

数组Int = [" 1"," 2"]

4 个答案:

答案 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-letif-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]

enter image description here

相关问题