LINQ:分组集合

时间:2009-05-03 09:52:18

标签: c# linq

我正在编写太空入侵者进行练习;-)并且工作得很好但是我的入侵者还没有遇到问题。

所有入侵者都存储在一个列表中,我使用linq按照X-location对这些入侵者进行分组,这样我就可以随机访问一个组,并使用该列底部的入侵者进行回击。

var r = from invader in invaders
                group invader by invader.Location.X into invaderGroup
                orderby invaderGroup descending
                select invaderGroup.Take(random.Next(0, invaderGroup.Count()));

但无论我尝试什么(例如选择新的{invaderGroup.Key,invadergroup}; ),我的结果总是 null

有人可以给我一些帮助/提示吗?感谢

1 个答案:

答案 0 :(得分:1)

我发现您的查询有两个问题;您正在对组进行排序而不是对入侵者进行排序,并且您使用Take的随机数可以为零,以便它可以返回空结果。

这适用于按X坐标对入侵者进行分组,按Y坐标对其进行排序,随机选取一个组并获取具有最高Y坐标的入侵者:

var r =
    from invader in invaders
    orderby invader.Location.Y descending
    group invader by invader.Location.X into invaderGroup
    select invaderGroup;

Invader fire = r.Skip(random.Next(r.Count())).First().First();