LINQ question … need to get element with min value

Im new to linq so i still struggle ....

I have a collection of controls (each has a Location of type Point). Мне нужно удалить элемент управления с самым низким значением Y (верхний элемент управления) из коллекции.

Пример был бы очень полезен!

8
задан no9 26 August 2010 в 12:44
поделиться

5 ответов

Что-то вроде этого:

collection.Remove(collection.OrderBy(c => c.Location.Y).First());

Сортировка довольно дорогая, поэтому в зависимости от вашего варианта использования вы также можете найти элемент с наименьшей стоимостью, а затем удалить его:

collection.Remove(collection.First(c => c.Y == collection.Min(c2 => c2.Y)));

Это перечисляет список до трех раз, как правило, это все равно должно быть быстрее, чем OrderBy, но если для вас важна производительность, сначала измерьте.

12
ответ дан 5 December 2019 в 07:56
поделиться

Вам просто нужно найти предмет и удалить его, это точно. Удалить очень понятно, но при поиске вы можете использовать метод Aggregate следующим образом:

collection
   .Remove(collection
       .Aggregate((c1, c2) => c1.Point.Y < c2.Point.Y ? c1 : c2)
   )
);
6
ответ дан 5 December 2019 в 07:56
поделиться
collection.Remove( collection.Min( c => c.Y ));
-1
ответ дан 5 December 2019 в 07:56
поделиться

Заказывать дороже. Просто получите минимальное значение.

var lowest = (from c in collection
              where c.X == collection.Min(i => i.X)
              select c).FirstOrDefault();
collection.Remove(c);
4
ответ дан 5 December 2019 в 07:56
поделиться

Помните, что LINQ означает Language INtegrated Query. То есть он предназначен для использования в качестве инструмента для запросов, а не для изменения коллекций.

Тем не менее, вы можете найти элемент управления, который нужно удалить, с помощью LINQ. Затем просто удалите его обычным способом.

// Let's say controls is a ControlCollection
var enumerable = controls.Cast<Control>();
int minimumY = enumerable.Min(c => c.Location.Y);
Control topControl = enumerable.Where(c => c.Location.Y == minimumY);

controls.Remove(topControl);
0
ответ дан 5 December 2019 в 07:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: