【发布时间】:2020-09-19 13:38:26
【问题描述】:
我有一个Item 数组。由于集合是基于其他地方的许多用户操作从 API 提供的,因此无法保证顺序。
但是,我需要通过 type 字段对该集合进行排序,以便可以在其他地方正确地对其进行迭代。
对于下面的示例游乐场,我需要一个遵循此逻辑的重新排序集合:
[
Item(type: .foo),
Item(type: .bar),
Item(type: .boo),
Item(type: .baz),
Item(type: .boom),
Item(type: .bang)
]
具体而言,.foo 和 .bar 应该是前 2 项,.boom 和 bang 将是最后 2 项。
这些固定项是唯一的,响应中不会存在重复项。
剩下的所有东西都应该在这两组之间,与它们在原始集合中的顺序相同。
我尝试将项目拆分为 var output: [Item] 内的 2 个集合,并在索引处插入第二个集合,但排序仍然关闭。
我怎样才能做到这一点?
import UIKit
enum ItemType: String {
case foo
case bar
case boo
case baz
case boom
case bang
}
struct Item {
let type: ItemType
}
let props = [
Item(type: .bang),
Item(type: .bar),
Item(type: .baz),
Item(type: .boo),
Item(type: .boom),
Item(type: .foo)
]
/*
case foo
case bar
> ----------- should be ordered in same order as in `props`
case boom
case bang
*/
var output: [Item] {
var fixedPosition: [Item] = []
var dynamicPosition: [Item] = []
props.forEach { item in
if (item.type == .foo || item.type == .bar || item.type == .boom || item.type == .bang ){
fixedPosition.append(item)
} else {
dynamicPosition.append(item)
}
}
var result: [Item] = fixedPosition
result.insert(contentsOf: dynamicPosition, at: 1)
return result
}
print(output.map { $0.type })
【问题讨论】:
-
如果原始数组有多个
foo或bar怎么办? -
对不起,我应该说清楚,“固定”项目是独一无二的,它们不会重复。