问题描述
票数存在数据库表中,把票数取出放入list中,按降序排列,但是票数一样的情况怎么排名?比如第一个人是20票,第二个、第三个、第四个人都是10票,要让他们并列第二,怎么写程序?
解决方案
解决方案二:
我可以讲讲自己的思路,仅供你参考:1.先根据票数去重;2.然后根据降序排序,获取前面三个;3.最后一步,就是根据前三名的票数获取它在该表中的相关数据(数据可能是一条,也可能是多条,如果是多条的话,表示名次存在并列),一下代码仅供你参考。forList<Demo>demos=newList<Demo>();staticvoidMain(string[]args){List<Demo>demos=newList<Demo>();demos.Add(newDemo{Id=1,Count=5});demos.Add(newDemo{Id=2,Count=8});demos.Add(newDemo{Id=3,Count=23});demos.Add(newDemo{Id=4,Count=12});demos.Add(newDemo{Id=5,Count=12});demos.Add(newDemo{Id=6,Count=3});demos.Add(newDemo{Id=7,Count=7});demos.Add(newDemo{Id=8,Count=9});demos.Add(newDemo{Id=9,Count=15});demos.Add(newDemo{Id=10,Count=15});List<Demo>demoDistinct=newList<Demo>();demoDistinct.Add(newDemo{Id=1,Count=5});demoDistinct.Add(newDemo{Id=2,Count=8});demoDistinct.Add(newDemo{Id=3,Count=23});demoDistinct.Add(newDemo{Id=4,Count=12});demoDistinct.Add(newDemo{Id=5,Count=12});demoDistinct.Add(newDemo{Id=6,Count=3});demoDistinct.Add(newDemo{Id=7,Count=7});demoDistinct.Add(newDemo{Id=8,Count=9});demoDistinct.Add(newDemo{Id=9,Count=15});demoDistinct.Add(newDemo{Id=10,Count=15});List<Demo>otherList=newList<Demo>();//去重for(inti=0;i<demoDistinct.Count;i++)//外循环是循环的次数{for(intj=demoDistinct.Count-1;j>i;j--)//内循环是外循环一次比较的次数{if(demoDistinct[i].Count==demoDistinct[j].Count){demoDistinct.RemoveAt(j);}}}//降序排序,然后获取获得票数最多的三名otherList=demoDistinct.OrderByDescending(p=>p.Count).ToList();//第一名List<Demo>first=newList<Demo>();first=demos.Where(p=>p.Count==otherList[0].Count).ToList();//第二名List<Demo>second=newList<Demo>();second=demos.Where(p=>p.Count==otherList[1].Count).ToList();//第三名List<Demo>third=newList<Demo>();third=demos.Where(p=>p.Count==otherList[2].Count).ToList();}publicclassDemo{publicintId{get;set;}publicintCount{get;set;}}
解决方案三:
写简化点:staticvoidMain(string[]args){List<Demo>demos=newList<Demo>();demos.Add(newDemo{Id=1,Count=5});demos.Add(newDemo{Id=2,Count=8});demos.Add(newDemo{Id=3,Count=23});demos.Add(newDemo{Id=4,Count=12});demos.Add(newDemo{Id=5,Count=12});demos.Add(newDemo{Id=6,Count=3});demos.Add(newDemo{Id=7,Count=7});demos.Add(newDemo{Id=8,Count=9});demos.Add(newDemo{Id=9,Count=15});demos.Add(newDemo{Id=10,Count=15});List<Demo>demoDistinct=newList<Demo>();List<Demo>otherList=newList<Demo>();//demoDistinct是为了在下面去重用foreach(Demodemoindemos){demoDistinct.Add(demo);}//去重for(inti=0;i<demoDistinct.Count;i++)//外循环是循环的次数{for(intj=demoDistinct.Count-1;j>i;j--)//内循环是外循环一次比较的次数{if(demoDistinct[i].Count==demoDistinct[j].Count){demoDistinct.RemoveAt(j);}}}//降序排序,然后获取获得票数最多的三名otherList=demoDistinct.OrderByDescending(p=>p.Count).ToList();//第一名List<Demo>first=newList<Demo>();first=demos.Where(p=>p.Count==otherList[0].Count).ToList();//第二名List<Demo>second=newList<Demo>();second=demos.Where(p=>p.Count==otherList[1].Count).ToList();//第三名List<Demo>third=newList<Demo>();third=demos.Where(p=>p.Count==otherList[2].Count).ToList();}publicclassDemo{publicintId{get;set;}publicintCount{get;set;}}
解决方案四:
请先把你的数据结构写清楚,你的list中是如何表示“并列第二”的呢?
解决方案五:
对于通常的list而言,所谓“并列第二”根本不需要任何一行代码,就是按票数排序那么并列第二自然就排在第三名之前。关键是你现在是在假借编程术语(假设一个“list”字眼就是很时髦的编程术语的)弄一个与之不适配的概念。那么在你提这个问题之前,你应该先给别人说明“list中怎么表示’并列第二‘”这样才能得到靠谱的答案啊!
解决方案六:
既然是降序排列,和前一个数据比较不就行了么,和前一个票数相同,那么名次自然也相同
解决方案七:
降序后再进行票数的比较然后得出排名而不是直接根据顺序得出排名
解决方案八:
票数排序,然后根据票数显示就OK
解决方案九:
先排序,然后输出的时候与前面一个比一下,如果票数相同,等于前面一个的当前名次比如12245668这样