@MartinR:s answer 中使用的 max(by:) 方法在这里是适合目的的解决方案,但是(正如我通常写的 :),为了获得替代方案的乐趣,您还可以“手动”折叠数组上的索引以找到最长子数组对应的索引(最大.count):
let arr = [["a", "b", "c"], ["d", "e", "f", "g", "h", "i", "j"]]
if arr.count > 0 {
let longestSubArray = arr[
arr.indices.reduce(0) { arr[$1].count > arr[$0].count ? $1 : $0 } // (*)
]
print(longestSubArray) // ["d", "e", "f", "g", "h", "i", "j"]
}
/* (*) Alternatively:
arr.indices.lazy.map { arr[$0].count }.max() ?? 0 */
如果您想找到计数最多的子数组子集(可能不是单个子数组),您可以使用类似的方法并结合filter:
// two longest subarrays with same count
let arr = [["a", "b", "c"],
["d", "e", "f", "g", "h", "i", "j"],
["k", "l", "m", "n", "o", "p", "q"]]
let maxSubArrayCount = arr.lazy.map { $0.count }.max() // thanks @muescha (+)
let longestSubArrays = arr.filter { $0.count == maxSubArrayCount }
print(longestSubArrays) /* [["d", "e", "f", "g", "h", "i", "j"],
["k", "l", "m", "n", "o", "p", "q"]] */
/* (+) Alternatively:
let maxSubArrayCount = arr.reduce(0) { $1.count > $0 ? $1.count : $0 } */