自定义对象c#的一个属性的最小值的LINQ索引
本文关键字:属性 一个 最小值 LINQ 索引 对象 自定义 | 更新日期: 2023-09-27 18:00:11
我有一个自定义Object,它包含一个具有许多属性的Object。
这是我的自定义对象:-
private class ClosingBookItem
{
public IOrder Order;
public double EntryPrice;
// Maximum Adverse Effect Price
public double MAEP;
// closing order has a target of mean price
public bool MidTarget;
public ClosingBookItem(IOrder order, double entryPrice, double maep, bool midTarget)
{
Order = order;
EntryPrice = entryPrice;
MAEP = maep;
MidTarget = midTarget;
}
}
Object Order有一个名为LimitPrice的Double属性。
我已经创建了这个自定义对象的列表:-
List<ClosingBookItem> closingsBook = new List<ClosingBookItem>();
如何返回包含Order.LimitPrice最小值的列表中项目的索引?
我四处寻找,但找不到一个好的描述,尝试了一些东西,但没有成功。
您可以使用
double minLimitPrice = closingsBook.Min(b => b.Order.LimitPrice);
int index = closingsBook.FindIndex(b => b.Order.LimitPrice == minLimitPrice);
另一种纯LINQ方法:
index = closingsBook.Select((b, ix) => new { Book = b, Index = ix })
.OrderBy(x => x.Book.Order.LimitPrice)
.First()
.Index;
如果你想找到所有的索引,没有问题:
IEnumerable<int> allIndexes = closingsBook.Where(b => b.Order.LimitPrice == minLimitPrice);
Console.WriteLine(String.Join(",", allIndexes)); // f.e.
选择所有索引的纯LINQ方法:
IEnumerable<int> allIndexes = closingsBook.Select((b, ix) => new { Book = b, Index = ix })
.GroupBy(x => x.Book.Order.LimitPrice) // build groups per LimitPrice
.OrderBy(g => g.Key) // order by that ascending
.First() // take the group with lowest LimitPrice
.Select(x => x.Index); // select the indexes of that group
根据Tim的回答,您将获得符合条件的第一项。
万一你有几个价格相同的项目,并且你想拥有所有这些项目的索引,你可以使用这个:
int minPrice = closingsBook.Min(book => book.LimitPrice);
var indexes = closingsBook.Select((book, index) => new { book, index })
.Where(x => x.book.LimitPrice== minPrice)
.Select(x => x.index);