请问List如何分组?

铁血男儿007 2012-08-29 02:46:04
List<Student> student = new List<Student>();

以上是我自定义的一个泛型学生类,包含“姓名”、“年龄”、“班级”、“学号”等属性,现在要按照某一个属性对其进行分组,

例如:student 中有10条记录,现在要按照班级分类,其中第1、2条是同一班级、第3、4条是同一班级、第5、6、7条是同一班级、第8、9、10条是同一班级,我需要把它分成4组,并得到分组以后的List,然后循环它,去执行后面的操作,请问这个分组的方法应该怎么写?
...全文
5339 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
愚知 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:
引用 7 楼 的回复:

引用 6 楼 的回复:
引用 5 楼 的回复:
请问x是什么东西?是从哪儿……

百度一下lambda表达式

Lambda表达式是.net3.0中的新特性,我用的是.net2.0,怎么办?

用3.0的frame

请问具体怎么用啊?
[/Quote]
右键-> properties-> frame 选择为4.0
bigbaldy 2012-08-29
  • 打赏
  • 举报
回复
分组并打印:

(from student in students group student by student.age into g select g).ToList().ForEach(g =>
{
richTextBox1.Text += g.Key + "\n";
foreach (Student stu in g)
{
richTextBox1.Text += stu.name + "," + stu.age + "," + stu.grade + "," + stu.number + "\n";
}
});
ohkuy 2012-08-29
  • 打赏
  • 举报
回复
2.0就用Dictionary
我写了个小DEMO,你看一下


class Program
{
static void Main(string[] args)
{
List<Student> list = new List<Student>()
{
new Student{Name="aaa",ClassName="a",Age=20,StuNo="a001"},
new Student{Name="bbb",ClassName="a",Age=18,StuNo="a003"},
new Student{Name="ccc",ClassName="b",Age=20,StuNo="b001"},
new Student{Name="ddd",ClassName="b",Age=20,StuNo="b045"},
new Student{Name="eee",ClassName="c",Age=20,StuNo="c001"},
new Student{Name="fff",ClassName="c",Age=20,StuNo="c008"},
new Student{Name="ggg",ClassName="c",Age=20,StuNo="c050"},
new Student{Name="hhh",ClassName="c",Age=20,StuNo="c007"}
};
Dictionary<string, List<Student>> stuGroup = new Dictionary<string, List<Student>>();

foreach (Student item in list)
{
if (!stuGroup.Keys.Contains(item.ClassName))
{
stuGroup.Add(item.ClassName, new List<Student>());
}
stuGroup[item.ClassName].Add(item);

}
foreach (KeyValuePair<string,List<Student>> item in stuGroup)
{
Console.WriteLine("班级:"+item.Key);
foreach (Student stu in item.Value)
{
Console.WriteLine("姓名:" + stu.Name + "\t班级:" + stu.ClassName + "\t年龄:" + stu.Age + "\t学号:" + stu.StuNo);
}
}
Console.Read();
}
}
class Student
{
public string Name { get; set; }

public string ClassName { get; set; }

public int Age { get; set; }

public string StuNo { get; set; }

}

输出:
班级:a
姓名:aaa 班级:a 年龄:20 学号:a001
姓名:bbb 班级:a 年龄:18 学号:a003
班级:b
姓名:ccc 班级:b 年龄:20 学号:b001
姓名:ddd 班级:b 年龄:20 学号:b045
班级:c
姓名:eee 班级:c 年龄:20 学号:c001
姓名:fff 班级:c 年龄:20 学号:c008
姓名:ggg 班级:c 年龄:20 学号:c050
姓名:hhh 班级:c 年龄:20 学号:c007
铁血男儿007 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
现在都4.5了,你还不快更新
[/Quote]
客观原因,暂时更新不了,请问还有没有什么其它方法啊?
E次奥 2012-08-29
  • 打赏
  • 举报
回复
现在都4.5了,你还不快更新
铁血男儿007 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:

引用 6 楼 的回复:
引用 5 楼 的回复:
请问x是什么东西?是从哪儿……

百度一下lambda表达式

Lambda表达式是.net3.0中的新特性,我用的是.net2.0,怎么办?

用3.0的frame
[/Quote]
请问具体怎么用啊?
愚知 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:
引用 5 楼 的回复:
请问x是什么东西?是从哪儿……

百度一下lambda表达式

Lambda表达式是.net3.0中的新特性,我用的是.net2.0,怎么办?
[/Quote]
用3.0的frame
铁血男儿007 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
请问x是什么东西?是从哪儿……

百度一下lambda表达式
[/Quote]
Lambda表达式是.net3.0中的新特性,我用的是.net2.0,怎么办?
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
请问x是什么东西?是从哪儿……
[/Quote]
百度一下lambda表达式
铁血男儿007 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
C# code
List<Student> testStr = new List<Student>();
//添加testStr 元素
IEnumerable<IGrouping<string, Student>> query = testStr.GroupBy(x => x.班级);
foreach (IGroupi……
[/Quote]

请问x是什么东西?是从哪儿来的?
seominho 2012-08-29
  • 打赏
  • 举报
回复
List<Student> testStr = new List<Student>();
//添加testStr 元素
IEnumerable<IGrouping<string, Student>> query = testStr.GroupBy(x => x.班级);
foreach (IGrouping<string, Student> info in query)
{
List<Student> sl = info.ToList<Student>();//分组后的集合
foreach (Student item in sl)
{

}
}
--茶-- 2012-08-29
  • 打赏
  • 举报
回复
.net链表的功能在LINQ之后功能扩大了不少,可以和数据表一样操作了。
c2606050113 2012-08-29
  • 打赏
  • 举报
回复
student.GroupBy(x=>x.Name)
[Quote=引用 1 楼 的回复:]

student.GroupBy(x=>x.age)
[/Quote]
bdmh 2012-08-29
  • 打赏
  • 举报
回复
student.GroupBy(x=>x.age)
List不能赋值给List List不能赋值给List 1.首先,二者不是父子类关系。 如果是普通的父子类关系,由于Java的多态性,底层的后期绑定机制会在运行时检索子类方法列表,从而实现多态。 2.List属于泛型。(也算是多态的一种) Java的泛型实现是基于类型擦除的。换句话说,ListList由于类型擦除,在编译后会映射到相同的List类型上,也就是运行时实际无法区分二者,不过在取用时,编译器会进行类型还原,从而变为原来的ListList

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧