我有一个ProjectItem
类实例列表:List<ProjectItem> allProjects
。
我需要获取List<ProjectItemPair>
- 一个新的类实例列表,其中包含ProjectItem projectOne
和ProjectItem projectTwo
作为属性。
我必须预先处理初始列表,并且使用bool开关在迭代中的每个第二项上的结果列表中添加新的ProjectItemPair
。这是一种原始的旧学校方法。我相信Linq我可以有效地配对项目实例。我该怎么做?
答案 0 :(得分: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);
}