Re: [wizs] 字串比大小程式

看板mud_sanc作者 (漫雲端)時間15年前 (2009/02/10 17:16), 編輯推噓3(300)
留言3則, 2人參與, 最新討論串2/4 (看更多)
: 這樣就可以把玩家的 id 依字串大小 sort。 : 上面的程式還可以考量系統負擔再改寫,留給各位 wiz 思考。 : 不過考量到可能出現的錯誤,則也必須再改的完整一點,這個 : 各位 wiz 也可以思考。 : Laechan sort_array 本身是不斷地帶入陣列中的兩個元素做比對 因此若陣列元素有 N 個,sort_names 就會被執行 N x N-1 次(不跟自己比較) 也因此陣列元素數量愈多,sort_array 效能就會大符下降 因此在撰寫 sort_names 等比較函式時,必須盡量的最佳化 單就排序玩家名稱的部份,若想進一步提高效率 可以先用 map() 這個 efun 將所有玩家的名稱一次 query 出來 建立一個存滿所有玩家名稱的字串陣列 allnames string *allnames = map(users(), (: $1->query("name") :)) 然後再將 allnames 丟進 sort_array 排序 如此就可以馬上減少 sort_names 中 N x N-1 次的 ob->query() 執行 假設 N = 100, 每次執行 sort_names 所損耗的執行時間為 1ms 這樣做馬上就可以減少 100x(100-1)*1ms = 9900ms = 9.9sec 可以大幅提升效能(當然 sort_names 應該不會花到 1ms 那麼誇張啦..XD) 另外單純比對字串的話 可以直接使用 strcmp() 這個 efun 來取代自己寫的 sort_names 函式 但 strcmp 只能單純依照固定的字母順序排序,缺乏變化 需要特殊條件的排序就還是得自己撰寫 sort_names 函式 像是名稱中包括色碼等隱藏碼,就會需要另外進行過濾處理 僅供參考... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.50.65

02/10 20:56, , 1F
推! 有種矛塞頓開的感覺@O@
02/10 20:56, 1F


02/10 21:03, , 3F
對了大家可參考上面(我從來沒認真看過那些XDDD)
02/10 21:03, 3F
文章代碼(AID): #19aKNjs8 (mud_sanc)
文章代碼(AID): #19aKNjs8 (mud_sanc)