[wizs] 二維陣列資料排序問題
下午跟 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
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
31
60
706
1406