2009-05-03 2 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 со случайным числом, которое может быть нулевым, чтобы оно могло возвращать пустой результат.

Это работает для группировки захватчиков по координате Х, сортируя их по 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(); 
Смежные вопросы