现有List集合如下:
List<UserInfo> UserInfo 类有3个属性  :城市、用户姓名、用户性别要对 List<UserInfo> 进行统计分析
1、求出各个城市人数
2、求出人数最多的城市名称求解

解决方案 »

  1.   

    已经解决。用了2次foreach。。有没有其他高效率点的方法
      

  2.   


    // 如果是程序上做的话,用 Lamdha 比较合适
    List<UserInfo> users = GetUserInfo();// 1.
    var count = users.Where(user => user.City  == "[your city name]").Count();// 2.
    var maxCount = users.GroupBy(user => user.City)
                        .OrderBy(group => group.Count()).Last().Key
      

  3.   

    顶3楼,Lamada表达式确实不错。
    建议楼主装个ReSharp,会有提示,直接把你的双层循环变为Lamada。
      

  4.   


    //(1)
    List<UserInfo> list = ...
    var query = from x 
                in list 
                group x by x.城市 into g 
                select new { 城市 = g.Key, 人口 = g.Count() };
    //(2) 
    var maxcity = query.OrderBy(x => x.人口).OrderByDescending().First().城市;
      

  5.   

    可以考虑用SQL语句先查出,,在给赋值给List<UserInfo>
     
    1、select 城市,count(用户姓名) as 城市人数from UserInfo  group by 城市
    2、select 城市,max(count(用户姓名)) as 城市人数 from 
    (select 城市,count(用户姓名) as 城市人数from UserInfo  group by 城市) v 
      

  6.   

    public class UserInfo
            {
                private string city;
                private string name;
                private string gender;
                public UserInfo(string city, string name, string gender)
                {
                    this.city = city;
                    this.name = name;
                    this.gender = gender;
                }
                public string City { get { return city; } set { city = value; } }
                public string Name { get { return name; } set { name = value; } }
                public string Gender { get { return gender; } set { gender = value; } }            public override string ToString()
                {
                    return this.name;
                }
            }
            static void Main(string[] args)
            {
                List<UserInfo> Users = new List<UserInfo>() 
                                              { new UserInfo("SZ", "UserA", "M"),
                                                new UserInfo("SZ", "UserB", "F"),
                                                new UserInfo("GZ", "UserC", "F"),
                                                new UserInfo("BJ", "UserD", "M")
                                              };
                //1
                var p = from u in Users
                        group u by u.City into g
                        orderby g.Count()
                        select new { City = g.Key, pplCount = g.Count() };
                foreach (var item in p)
                    Console.WriteLine(item.City + ": " + item.pplCount);
                Console.WriteLine();
                //2
                var c = p.OrderByDescending(x => x.pplCount).First().City;
                Console.WriteLine(c);
                
                Console.ReadKey();
            }
      

  7.   

    不错。不过你可以再简化下
             public class UserInfo
            {
                public string City { get; set; }
                public string Name { get; set; }
                public string Gender { get; set; }            public override string ToString()
                {
                    return Name;
                }
           }