例如......
PUBLIC Structure System_Scoring_Structure
dim daily_evaluation_score as double
dim weekly_evaluation_score as double
dim monthly_evaluation_score as double
dim yearly_evaluation_score as double
End Structure
..使用此结构后,我想将每个变量重置为零,然后再次重新使用它以处理另一个数据记录。 我能想到的是将每个变量设置为零。 (我的实际结构有很多变量。)
Redim和Erase仅适用于阵列。
答案 0 :(得分:1)
如果只是新手呢?
Dim scores As System_Scoring_Structure = New System_Scoring_Structure
' TODO: Set the scores members and use it somewhere...
' ...
' now zero the structure out..
scores = New System_Scoring_Structure
' it's reset and ready to be filled again.
答案 1 :(得分:1)
我只是运行一个简单的基准来看看哪种方法最快。
如果您的任何变量都是引用类型,我建议您创建一个类。
假设结构中的所有变量都是值类型,我比较了以下两种方式。
我使用Double
类型的27个变量创建了自己的值类型结构,并在结构中编写了一个方法,将每个double设置为0,称为.Reset
然后我用几个秒表运行这段代码,看看这需要多长时间才能完成1000000000次,以及简单地指定为结构的新实例需要多长时间。
我的结构被称为test
- 是大写所有......
Dim t1 As New Stopwatch
Dim s As test
Dim s1 As test
t1.Start()
For i As Integer = 1 To 1000000000
s.reset()
Next
t1.Stop()
Dim t2 As New Stopwatch
t2.Start()
For i As Integer = 1 To 1000000000
s1 = New test
Next
t2.Stop()
MessageBox.Show(t1.ElapsedMilliseconds & " " & t2.ElapsedMilliseconds)
执行子1000000000次大约需要21秒,而执行New
分配1000000000次需要24秒才能在我的电脑上完成。所以有一个明显的区别,但是你的代码不会重复变量,这取决于个人品味。内存消耗没有显着差异,因此也不是考虑因素。
出于兴趣,我将结构更改为一个类,根据Microsoft的推荐方法,如果数据占用超过16个字节的内存,则再次运行基准测试。这个时间分别花了大约19秒31秒,第二个循环使用了几兆兆字节的内存。
所以......真的是你。
答案 2 :(得分:0)
您可以将其委托给函数或子程序 - 但要了解是否要调整原始数据(第一个示例 - ByRef),或者用新副本替换原始数据(第二个示例)。
Private sub Reset_system_scoring(ByRef sss as System_Scoring_Structure)
sss.daily_evaluation_score = 0
sss.weekly_evaluation_score = 0
[...]
end sub
或
Private function Reset_system_scoring() as System_Scoring_Structure
dim sss as System_Scoring_Stucture
sss.daily_evaluation_score = 0
sss.weekly_evaluation_score = 0
[...]
return sss ' OK - this is really ugly code.
end sub
如前所述 - 重新New
结构也可以工作 - 这假设内部的所有变量都默认为0,除非你有一个特定的构造函数。
还应考虑将结构重构为类。您可以使用它来存储基础数据,然后进行内部计算以获取聚合数据。这也允许您使用各种方法进行编码,包括Reset
,这使您的主代码看起来更整洁。