作者laechan (小太保)
看板mud_sanc
标题[wizs] 二维阵列资料排序问题
时间Wed Aug 7 13:37:50 2013
下午跟 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