使用LINQ在列表中均匀分配男性和女性

时间:2017-05-13 19:21:57

标签: c# list linq

我有Class1喜欢:

{ 
  string Name, 
  string Sex
}

我有一个List<Class1>有100个项目,其中50个是男性,50个是女性,我如何获得10组5Males和5个女性各有LINQ?

我已经设法将列表分为10组但不按性别平均分配。

  var foo = My100List.Select((person, index) => new {person, index})
                       .GroupBy(x => x.index%10)
                       .Select(i => new Group
                            { 
                               Name= "Group" + i.Key, 
                               Persons= i.Select(y => y.person).ToList()
                            }); 

上面的代码不是按性别分发的。

2 个答案:

答案 0 :(得分:2)

试试这个(未经测试):

int groupSize = 5;
var foo = My100List.GroupBy(x => x.Sex)
                   .SelectMany(g => g.Select((x, i) => new { Person = x, Group = i / groupSize}))
                   .GroupBy(x => x.Group)
                   .Select(g => new Group
                   {
                       Name = "Group" + g.Key,
                       Persons = g.Select(x => x.Person).ToList()
                   });

修改

经过测试和确认。上面的代码可以使用。

答案 1 :(得分:-1)

.OrderBy

之前为性别添加.Select

经过测试和工作:

var foo = My100List.OrderBy(p => p.Sex).Select((person, index) => new {person, index})
                   .GroupBy(x => x.index%10)
                   .Select(i => new Group
                        { 
                           Name= "Group" + i.Key, 
                           Persons= i.Select(y => y.person).ToList()
                        });