【问题标题】:How can I get a value in a List<object> by highest Id?如何通过最高 ID 在 List<object> 中获取值?
【发布时间】:2015-07-23 18:43:40
【问题描述】:

如何通过 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 是从小到大排序的。

【问题讨论】:

  • 你的意思是,如果BeregnRsi_Wilder碰巧以相反的顺序或未排序的顺序返回结果,你怎么能得到最高值?
  • “更好的方式”是指更好的性能吗? rsi_Wilder 订购了吗?
  • 也许您可以使用不同的数据结构以获得更好的性能。例如,SortedList 或 SortedSet,取决于您的应用程序的需求。
  • 你是这个意思? var max = rsi_Wilder.Max(rsi =&gt; rsi.RSI_Value);??
  • 标题的List&lt;object&gt; 具有误导性...

标签: c# list


【解决方案1】:

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

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

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

您可以找到更多示例here

【讨论】:

  • 即将发布与此类似的答案,因为 O(n) 将是最有效的。点赞!
【解决方案2】:
using System.Linq;

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

【讨论】:

  • 根据他的描述,他想要IdDate的最大RSI_Value;这只是返回最大 RSI_Value。
  • 我不能使用 rsi_Wilder.Max(x => x.RSI_Value);它应该是这样的 rsi_Wilder.Max(x => x.Id_Date).select(x => x.RSI_Value);这当然行不通。
【解决方案3】:
decimal rsiValueOfHighestId =
    rsi_Wilder.OrderByDescending(rsi => rsi.IdDate).First().RSI_Value;

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多