黑马程序员技术交流社区
标题: C#中有类似复合排序的方法吗 [打印本页]
作者: 思·长安 时间: 2013-11-6 13:20
标题: C#中有类似复合排序的方法吗
本帖最后由 思·长安 于 2013-11-7 16:30 编辑
比如让用户按顺序分别输入公司人数、员工姓名、工资 ,
最后按工资进行排序,按工资由高到低依次输出员工的姓名和工资
这个输出的时候怎样把姓名和工资对应起来输出呢?
考虑过用键值对和集合什么的 但是排序无能...
求高手解答
作者: 黑色海 时间: 2013-11-6 20:05
本帖最后由 黑色海 于 2013-11-7 07:26 编辑
在不考虑使用数据库的情况下可以考虑SortedList集合或者SortedDictionary集合,以工资为键,姓名为值,该集合会自动排序,另外集合也有设计排序的方法order By和其下边降序排列的,只是目前这两种鄙人还不会使用。
下面是我简单写的用SortedDictionary测试的的代码,输出时以工资升序打印。
SortedDictionary<int,string>dic=new SortedDictionary<int,string> ();
dic.Add( 3500,"王强");
dic.Add(4000,"刘菲");
dic.Add( 4500,"吴桐");
dic.Add(2000,"李茂荣");
dic.Add(1000,"白翠华");
dic.Add(6000,"刘忻");
foreach (KeyValuePair<int,string> kvp in dic)
{
Console.WriteLine("姓名{0} 工资{1}",kvp.Value,kvp.Key);
}
Console.ReadKey();
另外下面是使用LINQ语句查询后得到楼主要的结果,只是在查询结果中发生排序,集合内的排列顺序并未发生改变
Dictionary<string,int>dic=new Dictionary<string,int> ();
dic.Add( "王强",3500);
dic.Add("刘菲",4000);
dic.Add( "吴桐",4500);
dic.Add("李茂荣",2000);
dic.Add("白翠华",1000);
dic.Add("刘忻",6000);
//按工资升序
var result = from ds in dic orderby ds.Value select ds;
foreach (KeyValuePair<string,int> kvp in result)
{
Console.WriteLine("姓名{0} 工资{1}",kvp.Key,kvp.Value);
}
//按工资降序
var result1 = from ds in dic orderby ds.Value descending select ds;
foreach (KeyValuePair<string, int> kvp in result1)
{
Console.WriteLine("姓名{0} 工资{1}", kvp.Key, kvp.Value);
}
Console.ReadKey();
作者: 猫咪不吃糖 时间: 2013-11-6 20:54
- static void Main(string[] args)
- {
- int n;//人数
- string name;
- int salary;
- Dictionary<string, int> dict = new Dictionary<string, int>();
- Console.Write("请输入人数:");
- n = Convert.ToInt32( Console.ReadLine());
- for (int i = 0; i < n; i++)
- {
- Console.Write("请输入姓名:");
- name = Console.ReadLine();
- Console.Write("请输入工资:");
- salary = Convert.ToInt32( Console.ReadLine());
- dict.Add(name, salary);
- }
- Dictionary<string, int> dic1Asc = dict.OrderBy(o=>o.Value).ToDictionary(o => o.Key, p => p.Value);
- foreach (string s in dic1Asc.Keys)
- {
- Console.WriteLine(s + ":" + dict[s].ToString());
- }
- Console.ReadKey();
- }
复制代码
作者: 思·长安 时间: 2013-11-7 12:03
(o => o.Value).ToDictionary(o => o.Key, p => p.Value); 求解这个是什么意思
作者: 思·长安 时间: 2013-11-7 12:05
Sorted{:3_49:}LINQ语句...这个我就已经不会了
作者: 黑色海 时间: 2013-11-7 12:24
学点SQL基础就很好学了,看看MSDN,其实很好理解
作者: 猫咪不吃糖 时间: 2013-11-7 15:27
声明了一个o,用来指代集合中的一对键值,说明是按o.Value排序。
排序输出的东西拆箱了,ToDictionary再装箱放回去。
作者: 思·长安 时间: 2013-11-7 16:14
明白了 谢谢啦
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |