3

次のようなオブジェクトが与えられた場合:

public class Test
{
   public int Id { get; set;}
   public int Field1 { get; set; }
   public int Field2 { get; set; }
}

次のように入力されます。

List<Test> list = new List<Test>();
list.Add( new Test { Id = 1, field1 = 1});
list.Add( new Test { Id = 1, field1 = 2});
list.Add( new Test { Id = 2, field1 = 3});
list.Add( new Test { Id = 2, field1 = 4});

インデックス列を作成し、リストを反復処理できます。

var indexList = list.Select((t, i) => new {t, index = i}).ToList();

foreach (var t in indexList)
{
    Console.WriteLine("ID: " + t.t.Id + " ---- Index:" + t.index);
}

そして、次のような結果が得られます。

ID: 1 ---- Index:0
ID: 1 ---- Index:1
ID: 2 ---- Index:2
ID: 2 ---- Index:3

私が本当にやりたいことは、次のような出力が得られるように、各 Id グループのインデックスをリセットすることです。

ID: 1 ---- Index:0
ID: 1 ---- Index:1
ID: 2 ---- Index:0
ID: 2 ---- Index:1

GroupBy で遊んでみましたが、あまり運がありませんでした。

誰かが私を正しい方向に向けることができますか?

ありがとう

4

2 に答える 2

3

どうですか:

var indexList = list
    .GroupBy(item => item.Id)
    .SelectMany(grp => grp
        .Select((item, index) => new { index = index, t = item }))
    .ToList();

例: http://ideone.com/nSTa8A

于 2013-06-06T12:38:45.327 に答える
0
var indexList = list.GroupBy(x=>x.Id)
                    .SelectMany(g => g.Select((t, i) => new {t, index = i})
                    .ToList();
于 2013-06-06T12:28:06.100 に答える