俄罗斯贵宾会-俄罗斯贵宾会官网
做最好的网站

在命令行任意输入一组数字(0~【俄罗斯贵宾会】9),然后统计这组数据中每个数字出现的个数,然后将统计个数逆

需求:在命令行任意输入一组数字(0~9),然后统计这组数据中每个数字出现的个数,然后将统计个数逆序输出

三种去重的方法

输出样例:

1、List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法。

俄罗斯贵宾会 1

2、使用表达式

开始分解:

[csharp] view plain copy

1、首先看到样例输出,第一想到的是什么,怎么从命令行中获取一组数字(根据需求值应该只有0~9)?

 

2、怎么去除重复的数字?

  1. users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i)  

3、怎样将出现的数字和统计个数结合起来?主要是结合。

去重,这条语句返回结果只保留users这个List中重复的元素的第一个(name相等认为重复)。

4、怎样将数字和计数结合后的集合按照计数的逆序输出?这个很关键。

3、使用循环,判断每个元素是否重复


 

那好,就剩下就是解决问题了。

 

第1步:

[csharp] view plain copy

  首先我们知道命令行获读取一般都是字符串,最常用的就是Console.Read和Console.ReadLine。但是这块用Read的话就有些不太方便了,因为你要用循环读取,而且你读过来的是字符的ASCII码值,所以我们用ReadLine方法。

 

俄罗斯贵宾会 2

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4.   
  5. namespace NonDuplicateList  
  6. {  
  7.     class Program  
  8.     {  
  9.         static void Main(string[] args)  
  10.         {  
  11.             List<User> users = new List<User>();  
  12.             users.Add(new User("张三", "永丰路299号"));  
  13.             users.Add(new User("张三", "上地西路8号"));//重复项,去重后将删掉  
  14.             users.Add(new User("李四", "海鹰路甲一号"));  
  15.   
  16.             List<User> nonDuplicateList1 = users.Distinct().ToList();//通过User类的Equals实现去重  
  17.             List<User> nonDuplicateList2 = users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i).ToList();//Lambda表达式去重  
  18.             List<User> nonDuplicateList3 = new List<User>();//通过循环方式去重  
  19.             foreach(User user in users)  
  20.             {  
  21.                 if(nonDuplicateList3.Exists(x=>x.name==user.name) == false)  
  22.                 {  
  23.                     nonDuplicateList3.Add(user);  
  24.                 }  
  25.             }  
  26.   
  27.             foreach(List<User> list in new Object[]{nonDuplicateList1,nonDuplicateList2,nonDuplicateList3})//打印出三个List的元素  
  28.             {  
  29.                 Console.Write("nonDuplicateList:rn");  
  30.                 foreach(User u in list)  
  31.                 {  
  32.                     Console.WriteLine("t" + u.ToString());  
  33.                 }  
  34.             }  
  35.             Console.Read();  
  36.         }  
  37.     }  
  38.   
  39.     class User:IEquatable<User>//继承IEquatable接口,实现Equals方法。List就可以使用Distinct去重  
  40.     {  
  41.         public string name { get; set; }  
  42.         string address;  
  43.   
  44.         public User(string _name, string _address)  
  45.         {  
  46.             name = _name;  
  47.             address = _address;  
  48.         }  
  49.   
  50.         public override string ToString()  
  51.         {  
  52.             return string.Format("name:{0},taddress:{1}", name, address);  
  53.         }  
  54.   
  55.         public bool Equals(User other)  
  56.         {  
  57.             return this.name == other.name;  
  58.         }  
  59.         public override int GetHashCode()  
  60.         {  
  61.             return name.GetHashCode();  
  62.         }  
  63.     }  
  64. }  

  那用ReadLine的话,读取的是字符串,那就需要我们把字符串处理一下,编程一个个的数字即可。那好办了。

俄罗斯贵宾会 3

  关键代码:

  

static List<int> GetConvertResult(List<string> list)
        {
            List<int> iList = new List<int>();
            int iTemp = 0;
            list.ForEach(item =>
            {
                if (int.TryParse(item, out iTemp))
                {
                    iList.Add(iTemp);
                }
            });

            return iList;
        }

  

List<int> list = GetConvertResult(Console.ReadLine().Split(' ').Where(item => item.Trim() != "").ToList());

  上面这句话的意思就是:从命令行读取的字符串,然后用空格(' ')分割,然后筛选出不为“”的,再转成List,传给

GetConvertResult(List<string> list)函数。好了第一个问题解决了

本文由俄罗斯贵宾会发布于编程,转载请注明出处:在命令行任意输入一组数字(0~【俄罗斯贵宾会】9),然后统计这组数据中每个数字出现的个数,然后将统计个数逆

您可能还会对下面的文章感兴趣: