按条目串联三个列表
本文关键字:三个 列表 | 更新日期: 2023-09-27 18:19:24
我只是想知道是否可以通过输入来连接列表;
List One Concat List Two Concat List Three
Entry One -> Entry Two -> Entry Three
Entry One -> Entry Two -> Entry Three
Entry One -> Entry Two -> Entry Three
我问这个问题的原因是我有三个列表来循环程序不同部分需要的值。我需要一种方法来按照它们在三个列表中出现的顺序连接条目。循环每个列表的代码为;
List<string> QualificationList = new List<string>();
List<string> SubjectList = new List<string>();
List<string> GradeList = new List<string>();
foreach (XmlNode QualificationNode in GetQualification)
{
GetQualificationType = QualificationNode.InnerText;
QualificationList.Add(GetQualificationType);
}
foreach (XmlNode SubjectNode in GetSubject)
{
GetSubjects = SubjectNode.InnerText;
SubjectList.Add(GetSubjects);
}
foreach (XmlNode node in GetGrade)
{
GetGrades = node.InnerText;
GradeList.Add(GetGrades);
}
我只是想知道这是否可能,如果不是,我怎么能收集我需要连接或stringbuilder正确的信息。谢谢你提供的任何帮助
我想你想要Zip
:
var concatList = QualificationList.Zip(SubjectList, (q,s) => new {q, s})
.Zip(GradeList, (qs, g) => new {qs.q, qs.s, qs.g})
这将为您提供一个具有三个属性的匿名类型:q
(资格),s
(主题)和g
(等级)。如果您想将它们连接成一个字符串,只需使用Select
:
.Select( qsg => string.Format("{0} {1} {2}", q, s, g);
如果你愿意,你也可以用一个投影替换每个xxxList
;它只会增加Linq语句的复杂性(并且可能使其更难调试):
var concatList = GetQualification.Select(node => node.InnerText)
.Zip(GetSubject.Select(node => node.InnerText),
(q,s) => new {q, s})
.Zip(GetGrade.Select(node => node.InnerText),
(qs, g) => new {qs.q, qs.s, qs.g})
您的代码可以简化为:
QualificationList.AddRange(GetQualification.Select(item => item.InnerText));
SubjectList.AddRange(GetSubject.Select(item => item.InnerText));
GradeList.AddRange(GetGrade.Select(item => item.InnerText));
使用AddRange将使您免于循环,并且Select方法将返回文本出现的顺序。