标签:performance loops arrays c
某个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 [0]始终是Properties [0]的值,等等.
我的目标是获得最新的“ 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
}
上面的代码给了我想要的结果,唯一的问题是在没有更多的心跳值找到之后循环继续.是否有更有效的方法来执行以上操作?
解决方法:
我会在parallel for loop中找到包含“ Heart”(或其他关键字)的索引来加快速度.然后遍历这些索引以找到最新的索引.
static DateTime GetLatestHeartBeat(string[] props, string[] vals)
{
ConcurrentBag<int> heartIndxs = new ConcurrentBag<int>();
// find the indices of "Heart" in parallel
Parallel.For(0, props.Length,
index =>
{
if (props[index].Contains("Heart"))
{
heartIndxs.Add(index);
}
});
// loop over each heart index to find the latest one
DateTime latestDateTime = new DateTime();
foreach (int i in heartIndxs)
{
DateTime currentDateTime;
if (DateTime.TryParse(vals[i], out currentDateTime) && (currentDateTime > latestDateTime))
latestDateTime = currentDateTime;
}
return latestDateTime;
}
如果使用DateTime.TryParse确实太慢,则可以使用RegEx解析日期字符串并进行自己的比较.老实说,我不确定这是否比使用DateTime.TryParse更快.这是对该主题的讨论:Which is Quicker: DateTime.TryParse or Regex
标签:performance,loops,arrays,c 来源: https://codeday.me/bug/20191029/1959481.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。