【问题标题】:merging two different string lists to a class list将两个不同的字符串列表合并到一个类列表
【发布时间】:2018-03-08 16:01:46
【问题描述】:

我有这样的课程:

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>();

我该怎么做?

【问题讨论】:

    标签: c# list linq class


    【解决方案1】:

    使用.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 - 你是什么意思?您有两个单独的集合。你如何判断第一个中的哪个项目属于第二个中的一个?
    • 例如,如果事件 A 有多个执行时间,例如。活动 |表演时间事件A | 10:50,11:30 活动 B | 9:00, 10:00 我如何相应地添加它们
    • 是的,但是您有一个列表只包含名称,而第二个列表只包含时间。那你怎么知道哪个名字是哪个时间的? getProgrammingNamesgetProgrammingTimes 是做什么的?
    • @shikiko - 这是一个非常不同的问题,我不太了解合并的逻辑。我建议先尝试,然后发布另一个问题,其中包含 3 个列表的描述、每个列表的一些示例数据和预期结果。还请以可编译的方式发布它 - 这样更容易提供帮助。如果你希望你可以评论我,我会很乐意尝试和帮助
    【解决方案2】:

    一个简单的 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]
                });
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      相关资源
      最近更新 更多