首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分钟pr小时计算的代码优化

分钟pr小时计算的代码优化
EN

Stack Overflow用户
提问于 2010-05-25 16:19:29
回答 3查看 299关注 0票数 2

下面的代码从午夜开始以分钟为单位计算时间范围,并创建一个包含分钟和小时的数组。但是,它很慢。有什么更好的建议吗?(不,不能更改语言:-)

代码语言:javascript
运行
复制
Const clDeparture   As Long = 123
Const clArrival     As Long = 233
Dim lHour           As Long
Dim lMinute         As Long
Dim alHour(25)      As Long

For lMinute = 0 To 1440
    If lMinute >= clDeparture And lMinute < clArrival Then
        alHour(Int(lMinute / 60)) = alHour(Int(lMinute / 60)) + 1
    End If
Next

该数组现在应包含:

(0,0) (1,0) (2,57) (3,53) (4,0) .....

问候

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-25 22:17:42

你想知道每小时有多少分钟在时间跨度内吗?

我认为这应该可以做到这一点,或者类似的东西:

代码语言:javascript
运行
复制
lDepHour = Int(clDeparture / 60)
lDepMinute = clDeparture - lDepHour * 60
lArrHour = Int(clArrival / 60)
lArrMinute = clArrival - lArrHour * 60

If (lDepHour = lArrHour) Then
  alHour(lDepHour) = lArrMinute - lDepMinute
Else
  alHour(lDepHour) = 60 - lDepMinute
  alHour(lArrHour) = lArrMinute
  For lHour = lDepHour + 1 To lArrHour - 1
    alHour(lHour) = 60
  End For
End If

这应该比你已经得到的快60倍。

附注:如果时间跨度可以跨越午夜(到达<离开),则将到达时间加上24*60,执行相同的逻辑,如果是lHour >= 24,则将数字放入lHour - 24

票数 1
EN

Stack Overflow用户

发布于 2010-05-25 16:32:26

好吧,这样如何:

代码语言:javascript
运行
复制
For lMinute = clDeparture To clArrival - 1
    alHour(Int(lMinute / 60)) = alHour(Int(lMinute / 60)) + 1
Next

假设您只会在clDepartureclArrival之间的几分钟内执行任何操作,那么循环遍历其余的操作是没有意义的。

这是一个简单的开始。你当然可以通过查看每小时而不是每分钟来改进它,并检查该时间段“覆盖”了多大比例的时间。这会更棘手,但肯定是可行的。我不想冒险用VB编写这些代码,但如果你真的想要的话,我可能会开发出一个C#版本。我会从简单的代码开始,看看这是否足够快。

票数 1
EN

Stack Overflow用户

发布于 2010-05-25 22:31:04

使用整数运算而不是浮点数:

代码语言:javascript
运行
复制
Int(lMinute / 60)

等同于

代码语言:javascript
运行
复制
lMinute \ 60

但后者速度更快,因为它使用了整数除法,并且省去了从LongDouble再转换的需要。此外,VB6不能很好地进行优化。如果需要该值两次,请考虑将结果存储在变量中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2903029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档