IEnumerable查询GroupBy与最小和投影

问题描述:

我有这些数组索引相关。所以对于每个索引(ObjId,ObjState)组成一对。IEnumerable查询GroupBy与最小和投影

string[] ObjIds = { "Obj1", "Obj1", "Obj2", "Obj2", "Obj1", "Obj3", "Obj2", "Obj2" }; 
string[] ObjStates = { "OS11", "OS12", "OS21", "OS22", "OS13", "OS31", "OS22", "OS23" }; 

但是,我只想为每个ObjId最近一对(最接近索引0)。

对于上面的输入,输出会

{ Obj1, OS11 }, {Obj2, OS21}, {Obj3, OS31} 

如何做到这一点使用一个IEnumerable查询?我很难弄清楚如何跟踪指数。

+1

你有什么试过?分组的规则是什么?为什么有三个对象结果?为什么'{Obj2,OS23}'不在结果中? – 2013-04-10 20:15:26

+1

我认为你完全误解了这种情况。为了放纵你,结果中有三个对象,因为我定义了这个问题。 {Obj2,OS23}出于同样的原因不在结果中。 – Rire1979 2013-04-10 20:47:02

+0

我没有误解任何东西。我只是问了一些问题 – 2013-04-10 20:48:39

你应该能够做到:

var items = ObjIds.Zip(ObjStates, (id, st) => new {Id = id, State = st}) 
        .GroupBy(i => i.Id) 
        .Select(g => g.First()); 

Enumerable.Zip在这里使用“对了”为您的项目进入一个新的匿名类型,然后将项目进行分组,并且第一个项目选自每组。