1

ProjectItemクラスインスタンス のリストがあります: List<ProjectItem> allProjects

-プロパティとしてとList<ProjectItemPair>を持つ新しいクラスインスタンスのリストを取得する必要があります。ProjectItem projectOneProjectItem projectTwo

私は最初のリストをforeachする必要があり、boolスイッチを使用するとProjectItemPair、反復で2つおきのアイテムの結果リストに新しいものが追加されていました。これは原始的な古い学校のアプローチです。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

もう1つのやや単純な代替手段:

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 に答える