如何通过最高ID获取List <object>中的值?

时间:2015-07-23 18:43:41

标签: c# list

如何通过IdDate在rsi_Wilder中获取RSI_Value? 我排序我的rsi_Wilder,所以最高的IdDate总是最后一个索引。因此,我可以这样做:

class RSI
{
    public int IdDate { get; set; }
    public decimal RSI_Value { get; set; }
}

List<Datamodel.RSI> rsi_Wilder = BeregnRsi_Wilder(idVirksomhedensStamdata, BeregnAntalDage: 21);
var lastValue = rsi_Wilder[rsi_Wilder.Count - 1].RSI_Value;

它工作正常,但我认为必须有更好的方法/更好的性能才能找到最高IdDate的RSI_Value。最好的方法是什么?

编辑: 实施例。

rsi_wilder.Add(new Datamodel.RSI{IdDate = 25, RSI_Value = 17});
rsi_wilder.Add(new Datamodel.RSI{IdDate = 26, RSI_Value = 26});
rsi_wilder.Add(new Datamodel.RSI{IdDate = 27, RSI_Value = 9});
rsi_wilder.Add(new Datamodel.RSI{IdDate = 31, RSI_Value = 70});
rsi_wilder.Add(new Datamodel.RSI{IdDate = 32, RSI_Value = 55});

我需要获得具有最高IdDate的RSI_Value,而我不知道IdDate编号。我寻求的结果是RSI_Value = 55。 代码var lastValue = rsi_Wilder[rsi_Wilder.Count - 1].RSI_Value;完成工作,因为rsi_Wilder中的IdDate从最低到最高编号排序。

3 个答案:

答案 0 :(得分:3)

订购整个序列费用为O(n*log(n)),如果您想要的只是收藏的最大值,则不需要它。

只需迭代序列,并跟踪遇到的最大元素,就可以在O(n)中找到最大值。您甚至可以创建一个扩展方法来为您完成,或者只使用LINQ:

var result = yourcollection.Aggregate((x,y) => x.IdDate > y.IdDate ? x : y);

您可以找到更多示例here

答案 1 :(得分:2)

using System.Linq;

var lastValue = rsi_Wilder.Max(x => x.RSI_Value);

答案 2 :(得分:-1)

decimal rsiValueOfHighestId =
    rsi_Wilder.OrderByDescending(rsi => rsi.IdDate).First().RSI_Value;