将两个不同的字符串列表合并为一个类列表

4

我有一个如下的类:

class Item
{
    public string eventName{ get; set; }
    public string performanceTime { get; set; }
}

我有两个数据列表:

List<string> progName = getProgrammingNames();
List<string> progTimes = getProgrammingTimes()

这两个字符串列表中都有数据,我想将它们合并为

List<Item> itemList = new List<Item>();

我该如何做到呢?

2个回答

9
使用.Zip将项目组合在一起,然后投影Item类:
var result = progName.Zip(progTimes, (name, time) => new Item { 
    eventName = name, 
    performanceTime = time }).ToList();

Zip函数只会返回两个集合中同一索引位置上的元素,如果其中一个集合比另一个集合更大,那么超出部分将被忽略。在这种情况下,您可以使用全外连接的形式:

var result = from i in Enumerable.Range(0, Math.Max(progName.Count, progTimes.Count))
             join n in progName.Select((item, index) => new { item, index }) on i equals n.index into names
             from n in names.DefaultIfEmpty()
             join t in progTimes.Select((item, index) => new { item, index }) on i equals t.index into times
             from t in times.DefaultIfEmpty()
             select new Item { eventName = n?.item, performanceTime = t?.item };

如果一个事件名称有多个表演时间,是否有任何方法可以在给定时间重复相同的事件名称? - shikiko
@shikiko - 你是什么意思?你有两个不同的集合。你如何确定第一个集合中的哪个项目属于第二个集合中的项目? - Gilad Green
如果事件A有多个演出时间,例如:事件 | 演出时间 事件A | 10:50,11:30 事件B | 9:00, 10:00如何相应地添加它们? - shikiko
是的,但你有一个只包含名称的列表和一个只包含时间的列表。那么你如何知道哪个名称对应哪个时间?getProgrammingNamesgetProgrammingTimes函数分别是做什么用的? - Gilad Green
我有一个单独的 list<int> weeks,其中包含像 {5,3} 这样的元素。因此,基本上,5 指的是第一个事件所需的时间。 - shikiko
1
@shikiko - 这是一个非常不同的问题,我真的不理解合并的逻辑。我建议先尝试,然后再发布另一个问题,其中包括3个列表的描述,每个列表的一些示例数据和预期结果。此外,请以编译的方式发布它-这样更容易帮助。如果您愿意,可以评论我,我很乐意尝试并提供帮助。 - Gilad Green

1
一个简单的for循环不够吗?
        List<string> progName = getProgrammingNames();
        List<string> progTimes = getProgrammingTimes();

        if (progName.Count != progTimes.Count)
            throw new Exception("2 list counts are different");

        List<Item> itemList = new List<Item>();

        for (var l_i = 0; l_i < progName.Count; l_i++)
        {
            itemList.Add(new Item()
            {
                eventName = progName[l_i],
                performanceTime = progTimes[l_i]
            });
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接