我有一個快速數組,有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