[wizs] 二維陣列資料排序問題

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間12年前 (2013/08/07 13:37), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
下午跟 justinj 有聊到這個。方法不只一種,「我的話」大概 會這樣子做。 // 姓名, 座號, 數學成績, 英文成績, mixed my_class=({ ({"王小明",15,90,88}), ({"陳小成",3,75,40}), . . }); 宣告一個全域變數 data mapping data=([]); 然後將其 mapping 化 foreach(tmps in my_class) data[tmps[0]]=tmps; 這個就是把二維的東西,以姓名這個字串當 key name: data=([ "王小明":({"王小明",15,90,88}), "陳小成":({"王小明",15,90,88}), . . ]); 然後看今天是要排什麼 mixed tmps=keys(data); if(sort_by=="姓名") tmps=sort_array(tmps,"sort_names",this_object()); else if(sort_by=="座號") tmps=sort_array(tmps,"sort_seats",this_object()); . . 然後就是各 sort 函數 int sort_names(string a,string b) { return strcmp(data[a][0],data[b][0]); } int sort_seats(string a,string b) { data[a][1] > data[b][1] ? return 1 : return -1; } . . sort 完之後再做底下的動作 j=sizeof(tmps); for(i=0;i<j;i++) my_class[i]=data[tmps[i]]; 這樣即完成 my_class 依指定項目的排序。 因為每一次的 sort 時間都極短,所以當 data 一有值時 就相當於同一時間就 sort 完畢,所以 data 可做為全域 變數、又不會因此與它人混用。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.61.157.53
文章代碼(AID): #1I0TqnUt (mud_sanc)
文章代碼(AID): #1I0TqnUt (mud_sanc)