gpt4 book ai didi

c# - 匹配两个数组之间的属性/值数据

转载 作者:行者123 更新时间:2023-11-30 15:28:57 24 4
gpt4 key购买 nike

某个 API 调用返回两个数组。一个数组包含属性名称,例如

Properties[0] = "Heartbeat"
Properties[1] = "Heartbeat 2"
Properties[2] = "Some Other discovery method"

另一个数组包含 Properties 数组的值,例如

Values[0] = "22/01/2007"
Values[1] = "23/02/2007"
Values[2] = "5/06/2008"

values 和 properties 数组元素匹配,例如 Values[0] 始终是 Properties[0] 的值,等等。

我的目标是获取最新的“Heartbeat*”值。请注意,Heartbeat 属性和值并不总是在数组的元素 1 和 2 中,因此我需要搜索它们。

代码如下所示:

static DateTime GetLatestHeartBeat(string[] Properties, string[] Values)
{
DateTime latestDateTime = new DateTime();
for(int i = 0; i < Properties.Length; i++)
{
if(Properties[i].Contains("Heart"))
{
DateTime currentDateTime;
DateTime.TryParse(Values[i],out currentDateTime);
if (currentDateTime > LatestDateTime)
latestDateTime = currentDateTime;
}
}
return latestDateTime
}

上面的代码给了我想要的结果,唯一的问题是在没有更多的心跳值可以找到后循环继续。有没有更有效的方法来执行上述操作?

最佳答案

虽然这不能解决性能问题,但我会像这样优化查询:

var latestDateTime = Properties.Select((p, index) => 
new {p, v = DateTime.Parse(Values[index])})
.Where(e => e.p.Contains("Heart"))
.OrderByDescending(e => e.v).First();

也许将解析移动到 where 子句之后会限制它的转换次数。

var latestDateTime = Properties.Select((p, index) => 
new {p, v = Values[index]})
.Where(e => e.p.Contains("Heart"))
.Select(e => DateTime.Parse(e.v))
.Max();

编辑:根据@dbc 的评论,将 .OrderByDescending(e => e).First(); 更改为 Max();

关于c# - 匹配两个数组之间的属性/值数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24621527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com