惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
有赞技术团队
有赞技术团队
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
D
DataBreaches.Net
F
Full Disclosure
腾讯CDC
博客园 - 【当耐特】
MyScale Blog
MyScale Blog
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
The Register - Security
The Register - Security
WordPress大学
WordPress大学
博客园 - 聂微东
雷峰网
雷峰网
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy International News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
A
Arctic Wolf
Scott Helme
Scott Helme
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tor Project blog
博客园 - 三生石上(FineUI控件)
Know Your Adversary
Know Your Adversary
AWS News Blog
AWS News Blog
G
Google Developers Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CERT Recently Published Vulnerability Notes
O
OpenAI News
Project Zero
Project Zero
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Application and Cybersecurity Blog
Application and Cybersecurity Blog
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
MongoDB | Blog
MongoDB | Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
P
Palo Alto Networks Blog
Schneier on Security
Schneier on Security

博客园 - 我有我奥妙

【BenchmarkDotNet】测试多方式的对象映射 【自动注入】.NET8/.NETCore 依赖注入:自动注入项目中所有接口和自定义类 【Quartz】.Net8使用定时任务 【模型验证】未被异常捕获到 【Ant Design Vue】相关 【根节点】C#找树形数据的根节点Id 【C#】枚举值 【ECharts】图表自定义显示标题 【消息队列】介绍 【Nginx】Windows部署Vue 设计模式(一)-介绍 【.NetCore】创建本机的静态文件服务器 NLog(一)-使用示例 【nssm】windows上netcore注册为服务 【字符串排序】C#和前端js排序问题 【长路经】C#读取文件抛出FileNotFoundException异常 【RestSharp】常用的几个请求方式 【笔记软件】Obsidian的使用 【浏览器扩展】编写Firefox和Chrome的扩展程序
【排名】处理同分数的排名
我有我奥妙 · 2025-04-20 · via 博客园 - 我有我奥妙

实体类

    public class UserScore
    {
        public string Name { get; set; }
        public double TotalScore { get; set; }
        public int Ranking { get; set; }
        public int ThanUserNumber { get; set; }
        public double ThanUserRate { get; set; }
    }

测试方法

        static void Test()
        {
            List<UserScore> userScoreStats = new List<UserScore>
            {
                new UserScore { Name = "张三A", TotalScore = 23.5d, },
                new UserScore { Name = "张三B", TotalScore = 23.5d, },
                new UserScore { Name = "张三C", TotalScore = 18.1d, },
                new UserScore { Name = "张三D", TotalScore = 79.3d, },
                new UserScore { Name = "张三E", TotalScore = 37.2d, },
                new UserScore { Name = "张三F", TotalScore = 49.5d, },
                new UserScore { Name = "张三G", TotalScore = 97.9d, },
                new UserScore { Name = "张三H", TotalScore = 3.1d, },
            };

            int UserNumber = userScoreStats.Count;

            userScoreStats = userScoreStats.OrderByDescending(x => x.TotalScore).ThenBy(x => x.Name).ToList();

            //更新排名、占比
            double temp = -1;                        //临时变量
            int num = 0;                            //自然排序变量
            int final_num = 0;                    //最终排名变量
            int temp_num = 0;                        //临时增量
            for (int i = 0; i < userScoreStats.Count; i++)
            {
                var str = userScoreStats[i].TotalScore;//当前循环的出勤率
                                                       //如果临时变量和错误率相等 说明本次错误率和上次是一致的 那么排名也应该和上次一样,但是要记录这种情况出现几次,最后如果当前排名不和上次一致时需要将排名加上空挡的增量
                if (temp == str)
                {
                    temp_num++;                     //相等时记录增量  有几条一样的排名
                    final_num = num;               //将排名赋值成和上一次排名一样    
                }
                else
                {
                    num++;                            //不相等时 排名自然增加    
                    final_num = num + temp_num;         //最终排名为自然排名加上之前的相等记录增量
                    num = final_num;                  //将自然排名设置为最终排名的数上    
                    temp_num = 0;                       //记录相等排名的增量置空    
                }
                temp = str;                           //用个临时变量去记录上次的错误率   

                var currRateCount = userScoreStats.Where(x => x.TotalScore == str).Count();//当前率的个数

                var Ranking = final_num;//排名,会并列
                var ThanUserNumber = UserNumber - final_num - currRateCount + 1;//超越多少人

                userScoreStats[i].Ranking = Ranking;
                userScoreStats[i].ThanUserNumber = ThanUserNumber;
                double ThanPeronRate = 0;
                if (UserNumber > 0)
                {
                    ThanPeronRate = (double)userScoreStats[i].ThanUserNumber / UserNumber;
                    ThanPeronRate = ThanPeronRate * 100;
                    ThanPeronRate = ThanPeronRate.ToChineseDouble();
                }
                userScoreStats[i].ThanUserRate = ThanPeronRate;
            }

            var query = userScoreStats.OrderBy(x => x.Ranking).ToList();
            foreach (var item in query)
            {
                Console.WriteLine($"{item.Name}\t{item.TotalScore}\t{item.Ranking}\t{item.ThanUserNumber}\t{item.ThanUserRate}");
            }
        }

运行结果

如图