我有一个快速数组,有5个元素的顺序。[A1,B2,C3,D4,E5] 我有另一个空的数组。存在于第一阵列中的5个选项可被输入以被插入。阵列排序逻辑
插入值时,它需要按基本数组的顺序排列。 让我们说第一D4被插入,所以D4将在阵列被插入[D4]
如果A1被插入,那么阵列顺序将是[A1,D4] 如果E5被插入,那么阵列顺序将是[ A1,D4,E5]
任何一个好心的建议一些相同的逻辑。
我有一个快速数组,有5个元素的顺序。[A1,B2,C3,D4,E5] 我有另一个空的数组。存在于第一阵列中的5个选项可被输入以被插入。阵列排序逻辑
插入值时,它需要按基本数组的顺序排列。 让我们说第一D4被插入,所以D4将在阵列被插入[D4]
如果A1被插入,那么阵列顺序将是[A1,D4] 如果E5被插入,那么阵列顺序将是[ A1,D4,E5]
任何一个好心的建议一些相同的逻辑。
这是可以如下实现的间接排序顺序:
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"]
。
如果您在使用雨燕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 } }
但这实际上返回基地阵列(未选择的),这可能的元素如果你使用的是对象而不是单纯的字符串,那么这是一个问题。
感谢Alain,它完美的工作..是的,我们只使用字符串。 –
你的代码是什么?它看起来像一个简单的排序,并发布了数千个答案 –
我强烈怀疑字符串数组是你正在尝试做的错误模型。如果您有一组有限的选项,请使用enum! – Raphael
此外,为什么值插入的顺序不同于参考数组?请分享一些背景知识,以便您尝试解决的实际问题变得清晰。 – Raphael