C# 比较泛型列表的特定属性并合并类似数据
这都是用C语言编写的,使用的是.NET3.5 我有一个包含书籍信息的列表。每个项目包含课程缩写、课程编号和课程部分:C# 比较泛型列表的特定属性并合并类似数据,c#,list,generics,filter,comparison,C#,List,Generics,Filter,Comparison,这都是用C语言编写的,使用的是.NET3.5 我有一个包含书籍信息的列表。每个项目包含课程缩写、课程编号和课程部分: myList1.Add("ACCT", 100, "1"); myList1.Add("ACCT", 100, "2"); myList1.Add("BUS", 101, "1"); and so on... 我需要做的是将具有相同课程和课程的项目组合在一起,使各部分成为一个字符串 "ACCT", 100, "1, 2" "BUS", 101, "1" 我应该如何比较列表中的
myList1.Add("ACCT", 100, "1");
myList1.Add("ACCT", 100, "2");
myList1.Add("BUS", 101, "1"); and so on...
我需要做的是将具有相同课程和课程的项目组合在一起,使各部分成为一个字符串
"ACCT", 100, "1, 2"
"BUS", 101, "1"
我应该如何比较列表中的每个项目以检查是否匹配?最初的方法使用了一长串if-else语句,并使用了5个列表。我尽量避免这样。这对我来说是正确的吗
编辑:为了回答Philipp的问题,列表使用了一个类,该类包含类似于Thomas Levesque的答案的属性:
class Course
{
public string Abbreviation { get; set; }
public int Number { get; set; }
public string Section { get; set; }
}
并由DataAccess类中的方法填充:
List<Course> list = DataAccess.GetData();
希望这能澄清这一点。假设以下类声明:
class Course
{
public string Abbreviation { get; set; }
public int Number { get; set; }
public string Section { get; set; }
}
你可以这样做:
var list = new List<Course>
{
new Course { Abbreviation = "ACCT", Number = 100, Section = "1" },
new Course { Abbreviation = "ACCT", Number = 100, Section = "2" },
new Course { Abbreviation = "BUS", Number = 101, Section = "1" },
...
};
var query = from c in list
group c by new { c.Abbreviation, c.Number } into g
select string.Format("\"{0}\", {1}, \"{2}\"",
g.Key.Abbreviation,
g.Key.Number,
String.Join(", ", g.Select(c => c.Section).ToArray()));
List<string> result = query.ToList();
如果使用列表,您可以执行以下操作:
var newList = myList1.GroupBy(i => new { i.Item1, i.Item2 })
.Select(g => new Tuple(g.Key.Item1,
g.Key.Item2,
String.Join(", ", g.Select(i => i.Item3))));
在3.5中,String.Join接受数组,而不是IEnumerable。只在4.0中添加了接受IEnumerable的重载