1

我有一个ProjectItem类实例列表: List<ProjectItem> allProjects.

我需要获得一个List<ProjectItemPair>- 一个新类实例的列表,这些实例具有ProjectItem projectOneProjectItem projectTwo作为属性。

我不得不 foreach 初始列表,并且使用 bool 开关ProjectItemPair在迭代中的每个第二项的结果列表中添加一个新的。这是一种原始的老派方法。我确信使用 Linq 我可以有效地将项目实例配对。我该怎么做?

4

1 回答 1

2

好吧,你可以使用:

var pairs = allProjects.Select((value, index) = > new { value, index })
                       .GroupBy(x => x.index / 2, x => x.value)
                       .Select(pair => new ProjectItemPair(pair.ElementAt(0),
                                                     pair.ElementAtOrDefault(1)))
                       .ToList();

的使用意味着如果有奇数个元素,ElementAtOrDefault则将传递构造函数。null

另一个更简单的选择:

var pairs = Enumerable.Range(0, allProjects.Count / 2)
                      .Select(i => new ProjectItemPair(allProjects[i * 2],
                                                       allProjects[i * 2 + 1]))
                      .ToList();

如果输入有奇数个元素,这将省略最后一个元素,在这种情况下你可以这样做:

if ((allProjects.Count % 2) == 1)
{
    pairs.Add(new ProjectItemPair(allProjects.Last(), null);
}
于 2012-06-18T15:23:32.153 回答