gpt4 book ai didi

arrays - 从 Swift 中的数组数组中删除较小的值集

转载 作者:可可西里 更新时间:2023-11-01 00:59:21 24 4
gpt4 key购买 nike

给定一个数组,该数组由包含整数的数组组成。

[[2], [3], [2, 2], [5], [7], [2, 2, 2], [3, 3]]

在 Swift 中,移除包含具有特定值的较少元素的数组并仅保留包含该值的较大数组的首选方法是什么。

上面输入的结果是

[[5], [7], [2, 2, 2], [3, 3]]

最佳答案

使用 [Int: [Int]] 字典来跟踪键指定值的最大数组。

let arrays = [[2], [3], [2, 2], [5], [7], [2, 2, 2], [3, 3]]
var largest = [Int: [Int]]()

for arr in arrays {
// Get the first value from the array
if let first = arr.first {

// current is the count for that key already in dictionary largest
// If the key isn't found, the nil coalescing operator ?? will
// return the default count of 0.
let current = largest[first]?.count ?? 0

// If our new array has a larger count, put it in the dictionary
if arr.count > current {
largest[first] = arr
}
}
}

// Convert the dictionary's values to an array for the final answer.
let result = Array(largest.values)

print(result) // [[5], [7], [2, 2, 2], [3, 3]]

同样的逻辑可以与 reduce 一起使用以在一行中提供结果:

let result = arrays.reduce([Int: [Int]]()) { var d = $0; guard let f = $1.first else { return d }; d[f] = d[f]?.count > $1.count ? d[f] : $1; return d }.map { $1 }

替代版本

此版本使用 [Int: Int] 字典仅保留为每个键找到的最大数组的计数,然后在末尾使用数组构造函数重建数组。

let arrays = [[2], [3], [2, 2], [5], [7], [2, 2, 2], [3, 3]]
var counts = [Int: Int]()

for arr in arrays {
if let first = arr.first {
counts[first] = max(counts[first] ?? 0, arr.count)
}
}

let result = counts.map { [Int](count: $1, repeatedValue: $0) }

print(result) // [[5], [7], [2, 2, 2], [3, 3]]

同样的逻辑可以与 reduce 一起使用以在一行中提供结果:

let result = arrays.reduce([Int: Int]()) { var d = $0; guard let f = $1.first else { return d }; d[f] = max(d[f] ?? 0, $1.count); return d }.map { [Int](count: $1, repeatedValue: $0) }

关于arrays - 从 Swift 中的数组数组中删除较小的值集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37603888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com