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

标签 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 是从低到高排序的。

最佳答案

对整个序列进行排序的成本为 O(n*log(n)),如果您只需要集合的最大值,则实际上并不需要。

您可以在 O(n) 中找到最大值,只需遍历序列并跟踪您遇到的最大元素。您甚至可以创建一个扩展方法来为您做这件事,或者只是使用 LINQ 来做:

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

您可以找到更多示例 here

关于c# - 如何通过最高 ID 获取 List<object> 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31595631/

相关文章:

c# - 通过局域网发送声音或流式传输声音

c# - 在 Azure 中托管 WCF 和可扩展性怎么样?

C++ 记住指向已分配字符串的指针

Python,使用列表中的列表,还是列表中的对象?

python - 基于列表元素和列表值的字典键

python - 从python中的列表和字典的复杂列表中提取元素

java - 在 Java 中为一个数字生成多个组合列表

c# - 转换不同类但相同类型的对象

c# - 如何应用css input last-child?

c# - 有界类型变量 Java 与 C#