You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swift中将含整数、浮点数及负数的数组拆分为三个新数组?

Swift数组拆分:分离负数、正整数和正浮点数

嘿,我来帮你搞定这个数组分类的问题!针对你给出的混合类型数组,我们可以通过类型检查和过滤操作精准拆分出需要的三类数据,下面是具体的实现方案和思路:

首先先明确原数组:

var numbers: [Any] = [4, 3.9, -23, 3, 7.6, -51, 75.3]

步骤1:筛选所有负数

我们需要找出数组中所有值小于0的元素,不管它是整数还是浮点数:

let negatives = numbers.filter {
    if let intNum = $0 as? Int, intNum < 0 {
        return true
    }
    if let doubleNum = $0 as? Double, doubleNum < 0 {
        return true
    }
    return false
}
print("负数:", negatives) // 输出:负数: [-23, -51]

步骤2:筛选剩余的正整数

从原数组中排除负数,再筛选出类型为Int且值大于0的元素:

let positiveIntegers = numbers.filter {
    guard let intNum = $0 as? Int else { return false }
    return intNum > 0
}
print("正整数:", positiveIntegers) // 输出:正整数: [4, 3]

步骤3:筛选剩余的正浮点数

最后排除负数和正整数,筛选出类型为Double且值大于0的元素:

let positiveFloats = numbers.filter {
    guard let doubleNum = $0 as? Double else { return false }
    return doubleNum > 0
}
print("正浮点数:", positiveFloats) // 输出:正浮点数: [3.9, 7.6, 75.3]

如果想追求更高效率,也可以通过单次遍历完成三类数据的分类,避免多次过滤数组:

var negatives: [Any] = []
var positiveInts: [Int] = []
var positiveDoubles: [Double] = []

for num in numbers {
    switch num {
    case let intNum as Int where intNum < 0:
        negatives.append(intNum)
    case let intNum as Int where intNum > 0:
        positiveInts.append(intNum)
    case let doubleNum as Double where doubleNum < 0:
        negatives.append(doubleNum)
    case let doubleNum as Double where doubleNum > 0:
        positiveDoubles.append(doubleNum)
    default:
        // 若数组中有其他类型元素,可在这里处理
        break
    }
}

print("负数:", negatives) // [-23, -51]
print("正整数:", positiveInts) // [4, 3]
print("正浮点数:", positiveDoubles) // [3.9, 7.6, 75.3]

这种方式在数组元素较多时,性能表现会更优~

内容的提问来源于stack exchange,提问作者Fernando Fuentes Martins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:39:28