A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 思·长安 中级黑马   /  2013-11-6 13:20  /  1937 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 思·长安 于 2013-11-7 16:30 编辑

比如让用户按顺序分别输入公司人数、员工姓名、工资 ,
最后按工资进行排序,工资由高到低依次输出员工的姓名和工资
这个输出的时候怎样把姓名和工资对应起来输出呢?
考虑过用键值对和集合什么的 但是排序无能...
求高手解答

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 黑色海 于 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();

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
  1.         static void Main(string[] args)
  2.         {
  3.             int n;//人数
  4.             string name;
  5.             int salary;
  6.             Dictionary<string, int> dict = new Dictionary<string, int>();
  7.             Console.Write("请输入人数:");
  8.             n = Convert.ToInt32( Console.ReadLine());
  9.             for (int i = 0; i < n; i++)
  10.             {
  11.                 Console.Write("请输入姓名:");
  12.                 name = Console.ReadLine();
  13.                 Console.Write("请输入工资:");
  14.                 salary = Convert.ToInt32( Console.ReadLine());
  15.                 dict.Add(name, salary);
  16.             }
  17.             Dictionary<string, int> dic1Asc = dict.OrderBy(o=>o.Value).ToDictionary(o => o.Key, p => p.Value);
  18.             foreach (string s in dic1Asc.Keys)
  19.             {
  20.                 Console.WriteLine(s + ":" + dict[s].ToString());
  21.             }
  22.             Console.ReadKey();
  23.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报

(o => o.Value).ToDictionary(o => o.Key, p => p.Value); 求解这个是什么意思
回复 使用道具 举报
黑色海 发表于 2013-11-6 20:05
在不考虑使用数据库的情况下可以考虑SortedList集合或者SortedDictionary集合,以工资为键,姓名为值,该集 ...

Sorted{:3_49:}LINQ语句...这个我就已经不会了
回复 使用道具 举报
思·长安 发表于 2013-11-7 12:05
SortedLINQ语句...这个我就已经不会了

学点SQL基础就很好学了,看看MSDN,其实很好理解
回复 使用道具 举报
思·长安 发表于 2013-11-7 12:03
(o => o.Value).ToDictionary(o => o.Key, p => p.Value); 求解这个是什么意思

声明了一个o,用来指代集合中的一对键值,说明是按o.Value排序。
排序输出的东西拆箱了,ToDictionary再装箱放回去。
回复 使用道具 举报
猫咪不吃糖 发表于 2013-11-7 15:27
声明了一个o,用来指代集合中的一对键值,说明是按o.Value排序。
排序输出的东西拆箱了,ToDictionary再 ...

明白了 谢谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马