我有一个快速数组,按顺序有5个元素。[A1,B2,C3,D4,E5] 我有另一个空数组。可以输入第一阵列中存在的5个选项以进行插入。
在插入值时,它需要按基本数组的顺序排列。 让我们说首先插入D4,所以D4将插入数组[D4]
如果插入A1,则数组顺序为[A1,D4] 如果插入E5,则数组顺序为[A1,D4,E5]
任何一个人都会提出相同的逻辑。
答案 0 :(得分:0)
这是间接排序顺序,可按如下方式实施:
let base = ["A1", "B2", "C3", "D4", "E5"]
let order = [String:Int](uniqueKeysWithValues: base.enumerated().map{($1,$0)})
var selection:[String] = []
func addToSelection(_ value:String)
{ selection = (selection + [value]).sorted{order[$0]! < order[$1]!} }
// adding values ...
addToSelection("D4") // ["D4"]
addToSelection("E5") // ["D4","E5"]
addToSelection("A1") // ["A1","D4","E5"]
。
如果您正在使用Swift 3(或者您更喜欢这种表示法),可以像这样初始化订单字典:
let order:[String:Int] = ["A1":1, "B2":2, "C3":3, "D4":4, "E5":5]
另一种不涉及排序的方法是将您的选择用作基础数组的过滤器:
let base ["A1", "B2", "C3", "D4", "E5"]
var selection:[String] = []
func addToSelection(_ value:String)
{ selection = base.filter{selection.contains($0) || $0 == value } }
但是这实际上会返回基本数组的元素(而不是选择),如果你正在处理对象而不仅仅是字符串,这可能是一个问题。