如果您正在寻找给定数组中最长的子数组,那么您可以使用max(by:)数组计数进行比较:
let a = [["a", "b", "c"], ["d", "e", "f", "g", "h", "i", "j"], ["k"]]
let longestSubArray = a.max(by: { $0.count < $1.count })!
print(longestSubArray)
// ["d", "e", "f", "g", "h", "i", "j"]
Run Code Online (Sandbox Code Playgroud)
在这里,我假设a不是空的,否则max(by:)
将返回nil.如果发生这种情况,请使用可选绑定:
if let longestSubArray = a.max(by: { $0.count < $1.count }) {
print(longestSubArray)
} else {
print("a is empty")
}
Run Code Online (Sandbox Code Playgroud)
备注: Array是一个RandomAccessCollection因此得到它count是一个O(1)操作.
如果在包含数组中同时需要最长元素及其索引,则可以将以上内容应用于a.enumerated():
if let (idx, longest) = a.enumerated().max(by: { $0.element.count < $1.element.count }) {
print("longest subarray", longest)
print("at index", idx)
}
Run Code Online (Sandbox Code Playgroud)
如果存在多个具有最大长度的子阵列,则上述解决方案将返回其中一个.@dfri的答案显示了如何获得 具有最大长度的所有子数组.
| 归档时间: |
|
| 查看次数: |
871 次 |
| 最近记录: |