如何在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
相关产品推荐
相关产品推荐

