2017-10-10 77 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,它完美的工作..是的,我們只使用字符串。 –