如何通过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从最低到最高编号排序。
答案 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;