【发布时间】:2011-11-10 08:51:32
【问题描述】:
我需要一些帮助来加快比较速度(示例如下)。该示例获取数组中的每个值,将小时附加到比较变量。如果没有匹配的值,它会将值添加到第二个数组(稍后连接)。
if (ticks.TypeOf == Period.Hour)
while (compareAt <= endAt)
{
if (range.Where(d => d.time.AddMinutes(-d.time.Minute) == compareAt).Count() < 1)
gaps.Add(new SomeValue() {
...some dummy values.. });
compareAt = compareAt.AddTicks(ticks.Ticks);
}
这个执行时间太长了。这个数组中最多有365 * 24 = 8760 个值。未来每月还会有分钟/秒60*24*31=44640,这意味着不可用。
如果数组通常是完整的(这意味着没有间隙/空槽),它可以很容易地被 if (range.Count() == (hours/day * days)) 绕过。不过,那一天不会是今天。
如何更有效地解决它?
一个例子:如果数组中有 7800 个值,我们会漏掉大约 950 个,对吧?但是我可以只找到间隙结尾,然后创建缺失值吗?这将使 o-notation 取决于间隙的数量,而不是值的数量..
另一个受欢迎的答案只是一个更有效的循环。
[编辑] 抱歉英语不好,我尽力描述。
【问题讨论】:
-
我读了你的问题两次,但我仍然不确定你在这里要求什么。 “阵列中的间隙”,您是在谈论阵列中的空槽吗?或间隔?请重写您的问题,使其更有意义。
-
抱歉,无法理解您要做什么。
-
@Lasse Gaps 表示空位!对不起英语。小时可以跨越
20110101 00:00 -- 20110601 23:00,但有缺失值,即20110303 14:00 20110304 04:00 -
这不就是对它们进行排序,遍历它们,并处理一个项目和下一个项目之间的差异吗?然后,您可以轻松识别任何缺失值。
-
@Lasse,嗯.. 这正是上面的代码示例正在做的事情.. 比较一年的时间需要很多时间。
标签: c# performance algorithm