如何在Swift中用map和filter将指定Int索引数组转为对应String数组?
Swift中用map和filter实现索引映射字符串数组的方案
首先定义题目中给出的字符串数组:
var arrayOfStrings: [String] = ["apple", "banana", "orange"]
方式一:先过滤有效索引再映射
这种方式先处理传入的索引数组,剔除掉超出字符串数组范围的无效值,再通过map将有效索引映射为对应的字符串,适合需要保留传入索引顺序的场景:
func selectedStrings(from indices: [Int]) -> [String] { // 过滤出在字符串数组合法范围内的*有效索引* let validIndices = indices.filter { $0 >= 0 && $0 < arrayOfStrings.count } // 将有效索引映射为对应的字符串元素 return validIndices.map { arrayOfStrings[$0] } } // 调用示例 let result1 = selectedStrings(from: [0, 1]) print(result1) // 输出 ["apple", "banana"] // 处理含无效索引的情况 let result2 = selectedStrings(from: [0, 3, 1]) print(result2) // 输出 ["apple", "banana"]
方式二:遍历原数组筛选目标索引
这种方式通过enumerated()遍历原字符串数组的索引和元素,用filter筛选出索引在传入集合中的元素,再用map提取出字符串,适合需要保持原字符串数组元素顺序的场景(即使传入的索引是乱序的):
func selectedStrings(from indices: [Int]) -> [String] { return arrayOfStrings.enumerated() // 筛选出索引存在于传入数组中的元素 .filter { indices.contains($0.offset) } // 将枚举对象映射为对应的字符串元素 .map { $0.element } } // 调用示例 let result3 = selectedStrings(from: [1, 0]) print(result3) // 输出 ["apple", "banana"](保持原数组顺序)
内容的提问来源于stack exchange,提问作者stefanosn
相关产品推荐
相关产品推荐

