简单的键值按值排序问题-阿里云开发者社区

开发者社区> 技术mix呢> 正文

简单的键值按值排序问题

简介:
+关注继续查看

 需求是这样的:http://q.cnblogs.com/q/29266/

  这里简述一下:

一个小小排序问题。。不是很高深的
用c#代码实现,不要用linq技术
问题:
广东 30
湖南 20
广西 60
北京 70
上海 30

排序之后:

北京 70
广西 60
广东 30
上海 30
湖南 20

  这是一个简单的键值按值排序问题,难点在于不用linq(有的项目环境是.NET 2.0),如果用linq很容易解决(在该问题的回复中有,这里就不说了),下面提供两种方法。

  方法一,建一个只有key和value两个属性的实体,然后用冒泡排序,代码如下:

    class Program
{
static void Main(string[] args)
{
List<TestModel> tmlist = new List<TestModel>()
{
new TestModel(){city="广东",count=30},
new TestModel(){city="湖南",count=20},
new TestModel(){city="广西",count=60},
new TestModel(){city="北京",count=70},
new TestModel(){city="上海",count=30}
};

TestModel temp = new TestModel();
for (int m = 0; m < tmlist.Count; m++)
{
for (int n = 0; n < tmlist.Count - m - 1; n++)
{
if (tmlist[n].count < tmlist[n + 1].count)
{
temp = tmlist[n];
tmlist[n] = tmlist[n + 1];
tmlist[n + 1] = temp;
}
}
}

foreach (var item in tmlist)
{
Console.WriteLine(item.city + "" + item.count);
}

Console.Read();
}
}

public class TestModel
{
public string city { get; set; }
public int count { get; set; }
}

  这种方法容易理解,但要新建一个实体比较麻烦。

  如果在程序中只要做个简单的排序这样就显得太复杂了,有没有简单的方法呢?我这里提供另外一种思路,代码如下:

class Program
{
static void Main(string[] args)
{
//原有数据
Dictionary<string, int> val = new Dictionary<string, int>();
val.Add("广东",30);
val.Add("湖南",20);
val.Add("广西",60);
val.Add("北京",70);
val.Add("上海",30);

SortedDictionary<int, string> newval = new SortedDictionary<int, string>(new ReverseComparer<int>());
int index = 1;
foreach (var item in val)
{
//这一行是关键
newval.Add(item.Value * 1000+index, item.Key);
index++;
}

val = new Dictionary<string, int>();
foreach (var item in newval)
{
val.Add(item.Value, item.Key / 1000);
Console.WriteLine(item.Value + "" + item.Key/1000);
}
//val就是排序后的字典集合
Console.Read();
}
}

sealed class ReverseComparer<T> : IComparer<T> where T : IComparable<T>
{
public int Compare(T x, T y)
{
return y.CompareTo(x);
}
}

  程序中也说了,newval.Add(item.Value * 1000+index, item.Key);这一行是关键,各位读者自己思考一下为什么可以这样处理,这样处理有什么局限性。

  非常欢迎大家提出自己的看法,留言讨论。



本文转自Artwl博客园博客,原文链接:http://www.cnblogs.com/artwl/,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
懒人小技巧, Toad 常用偷懒方法
懒人小技巧, Toad 常用偷懒方法
15 0
我为什么要放弃 RESTful,选择拥抱 GraphQL
REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。
16 0
架构师眼中的文化:试用期才是真正的考察时间
架构师眼中的文化:试用期才是真正的考察时间
12 0
L7 2.7 持续打磨可视化能力
导读L7 是由蚂蚁金服 AntV 数据可视化团队推出的基于 WebGL 的开源大规模地理空间数据可视分析开发框架。L7 专注于空间数据的可视化表达。图形符号学为理论基础,将抽象复杂的空间数据转化成 2D、3D 符号,通过颜色、大小、体积、纹理等视觉变量实现丰富的可视化表达。欢迎关注和 star 我们的 GitHub:https://github.com/antvis/L7官网:https://l7
6 0
百亿流量微服务网关的设计与实现(6)
百亿流量微服务网关的设计与实现(6)
10 0
“Haas物联网设备云端一体极客大赛”入选2021中国最受开发者欢迎技术活动
“Haas物联网设备云端一体极客大赛”入选2021中国最受开发者欢迎技术活动
26 0
我为什么要放弃 RESTful,选择拥抱 GraphQL
REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。
28 0
优秀API的设计原则与实例实现RESTful(6)
优秀API的设计原则与实例实现RESTful(6)
11 0
+关注
2969
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载