自定义对象 c# 的一个 属性 的最小值的 LINQ 索引
LINQ index of min value of one Property of a Custom Object c#
我有一个自定义对象,其中包含一个具有许多属性的对象。
这是我的自定义对象:-
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;
}
}
对象订单有一个 属性 是一个名为 LimitPrice 的 Double。
我已经创建了这个自定义对象的列表:-
List<ClosingBookItem> closingsBook = new List<ClosingBookItem>();
如何 return 列表中包含 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);
我有一个自定义对象,其中包含一个具有许多属性的对象。
这是我的自定义对象:-
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;
}
}
对象订单有一个 属性 是一个名为 LimitPrice 的 Double。
我已经创建了这个自定义对象的列表:-
List<ClosingBookItem> closingsBook = new List<ClosingBookItem>();
如何 return 列表中包含 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);