2009-05-03 70 views
0

我是编程空间入侵者的实践;-)和工作得很好,但我有一个问题,我的入侵者回火。LINQ:分组集合

所有侵略者都存储在一个列表中,我使用linq将他们的X位置归入这些侵略者,这样我就可以随机访问一个组,并让该列底部的入侵者进行回击。

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};)我的结果总是

任何人都可以提供一些帮助/提示吗?谢谢

回答

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();