在C#中组合2个不同大小的列表

时间:2013-11-03 17:05:35

标签: c# ienumerable

我有2个名单。我想将它们组合成1个列表。

问题是两个列表中只有一个只有一个计数

firstList.Count = 1

虽然第二个列表的大小为两个:

secondList.Count = 2

所以我想将这些列表的机器人组合成1个列表。

megaList => firstList {0, Empty},
            secondList {0 , 2}

我这样做的代码不会工作,因为这两个列表的大小不同。我该如何解决这个问题?

 List<QuestionAndResponses> megaList = new List<QuestionAndResponses>();
                for (var i = 0; i < firstList.Count(); i++)
                {
                    megaList.Add(new QuestionAndResponses()
                    {
                        Responses = new List<Response>(firstList[i].Response),
                        Questions = new List<Question>(secondList[i].Questions)
                    });
                }

我的模型看起来像这样:

public class QuestionAndResponses
    {
        public PreScreener Question { get; set; }
        public PreScreenerResponse Response { get; set; }
    }

2 个答案:

答案 0 :(得分:0)

我不知道为什么你有这两个列表以及你想要存储的内容。但是,只需对代码进行简单的更改,为什么不循环浏览更大的列表呢?

List<QuestionAndResponses> megaList = new List<QuestionAndResponses>();
var biggerList = firstList.Count() > secondList.Count() ? firstList : secondList
for (var i = 0; i < biggerList.Count(); i++)
{
   var response = firstList.Count() >= i+1 ? new List<Response>(firstList[i].Response) : new List<Response>();
   var questions = secondList.Count() >= i+1 ? new List<Question>(secondList[i].Questions) : new List<Question>(); 

   megaList.Add(new QuestionAndResponses()
      {
         Responses = response,
         Questions = questions
      });
}

希望这就是你要求的。

答案 1 :(得分:0)

我认为你的模型可能有问题,但你会比我更清楚这一点。第一个数组中的响应是否属于同一个问题?一个问题可以有多个回复吗?在这种情况下,您的模型可能是:

public class QuestionAndResponses
{
   public PreScreener Question {get; set;}
   public IEnumerable <PreScreenerResponse> Responses {get; set;}
}

var questionAndResponses = new List<QuestionAndResponses>();
foreach (var question in secondList)
{
   questionAndResponses.Add(
            new QuestionAndResponses
           {
              Question = question,
              Responses = firstList.Where(f => f.QuestionId = question.QuestionId)
           });
}

把它扔出去......