2017-10-10 105 views
0

我有一个快速数组,有5个元素的顺序。[A1,B2,C3,D4,E5] 我有另一个空的数组。存在于第一阵列中的5个选项可被输入以被插入。阵列排序逻辑

插入值时,它需要按基本数组的顺序排列。 让我们说第一D4被插入,所以D4将在阵列被插入[D4]

如果A1被插入,那么阵列顺序将是[A1,D4] 如果E5被插入,那么阵列顺序将是[ A1,D4,E5]

任何一个好心的建议一些相同的逻辑。

+1

你的代码是什么?它看起来像一个简单的排序,并发布了数千个答案 –

+0

我强烈怀疑字符串数组是你正在尝试做的错误模型。如果您有一组有限的选项,请使用enum! – Raphael

+0

此外,为什么值插入的顺序不同于参考数组?请分享一些背景知识,以便您尝试解决的实际问题变得清晰。 – Raphael

回答

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"] 

如果您在使用雨燕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 } } 

但这实际上返回基地阵列(未选择的),这可能的元素如果你使用的是对象而不是单纯的字符串,那么这是一个问题。

+0

感谢Alain,它完美的工作..是的,我们只使用字符串。 –