|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
cbtaja 说得不错,排名次这类问题,归根到底还是排序而已
楼主自己的代码如果计算几万行一列的名次只花几秒钟,也没什么必要再去优化了
多层次排名的一个取巧办法也跟cbtaja说的差不多,按总分全部人一起排名
然后按排名顺序把每个人的数据计算三次排名,分别是
全部人的队列排名
每个学校的队列排名(需要生成所有可能的学校的队列,并且可以快速找到每个人对应的队列)
每个班的队列排名(同样需要生成所有的班的队列)
这样就可以只排序一次,就得到所有层次的排名
如:
每个人的记录是 (my_score,my_school,my_class,global_rank,school_rank,class_rank)
全体排名的记录是 global_current_rank,global_current_score,global_queue_length)
每个学校的记录是 school_name,current_rank,current_score,queue_length)
每个班的记录是 class_name,current_rank,current_score,queue_length)
每个人的记录按my_score降序排列,然后逐一读取记录,
找到 school_name = my_school 的学校记录,queue_length = queue_length + 1
if my_score<>current_score then
school_rank = queue_length
else
school_rank = current_rank
end if
班排名的计算同上
[ 本帖最后由 灰袍法师 于 2011-3-15 01:12 编辑 ] |
|