简单的键值按值排序问题

简介:

 需求是这样的: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/,如需转载请自行联系原作者

相关文章
|
算法 NoSQL 应用服务中间件
定时器详解与代码实现
定时器详解与代码实现
|
JSON 数据格式 Python
【2023最新】Matlab 保存JSON数据集文件,并用Python读取
本文介绍了如何使用MATLAB生成包含数据和标签的JSON格式数据集文件,并展示了用Python读取该JSON文件作为训练集的方法。
448 1
|
10月前
|
SQL 人工智能 自然语言处理
DataWorks年度发布:智能化湖仓一体数据开发与治理平台的演进
阿里云在过去15年中持续为268集团提供数据服务,积累了丰富的实践经验,并连续三年在IDC中国数据治理市场份额中排名第一。新一代智能数据开发平台DateWorks推出了全新的DateStudio IDE,支持湖仓一体化开发,新增Flink计算引擎和全面适配locs,优化工作流程系统和数据目录管理。同时,阿里云正式推出个人开发环境模式和个人Notebook,提升开发者体验和效率。此外,DateWorks Copilot通过自然语言生成SQL、代码补全等功能,显著提升了数据开发与分析的效率,已累计帮助开发者生成超过3200万行代码。
|
11月前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
JavaScript
js运算符
js运算符
116 5
|
消息中间件 JavaScript 小程序
MQTT常见问题之mqtt通过token连接成功之后立马就断掉如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
存储 JavaScript 前端开发
JavaScript代码是怎么拼写的,高中开始
这段代码集合提供了多种实用的 JavaScript 功能,包括获取浏览器 Cookie 值、RGB 转十六进制、复制文本到剪贴板、检查日期有效性、找出一年中的某一天、字符串首字母大写、计算两天之间的天数差、清除所有 Cookie、生成随机十六进制颜色、数组去重、从 URL 获取查询参数、确认奇偶数、求平均值、回到页面顶部、翻转字符串、检查数组是否为空、获取用户选定的文本、打乱数组顺序以及检测用户是否处于暗模式。这些功能可以帮助开发者快速实现常用操作。
92 2
|
索引
刷爆leetcode第三期
刷爆leetcode第三期
74 0
题目----力扣--合并两个有序链表
题目----力扣--合并两个有序链表
91 0
PandasTA 源码解析(二十)(1)
PandasTA 源码解析(二十)
127 0