用单行求和 TimeSpan 数组?
有没有办法将多个聚合聚合到 1 个时间跨度?
Dim times = {
New TimeSpan(1, 0, 0),
New TimeSpan(1, 10, 0),
New TimeSpan(1, 50, 0),
New TimeSpan(0, 20, 0),
New TimeSpan(0, 10, 0)
}
Dim sum As New TimeSpan
For Each ts In times
sum = sum.Add(ts)
Next
'That's what I desire:
sum = times.Sum
sum = times.Aggregate
我正在寻找一些我不知道的内置功能。
更新 请阅读我对Reed Copsey 的回答的评论。
Is there a way to aggregate multiple aggregates to 1 time span?
Dim times = {
New TimeSpan(1, 0, 0),
New TimeSpan(1, 10, 0),
New TimeSpan(1, 50, 0),
New TimeSpan(0, 20, 0),
New TimeSpan(0, 10, 0)
}
Dim sum As New TimeSpan
For Each ts In times
sum = sum.Add(ts)
Next
'That's what I desire:
sum = times.Sum
sum = times.Aggregate
I am looking for some built in capability I don't know about.
Update
Please read my comment on Reed Copsey's answer.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
C#:
VB.NET:
C#:
VB.NET:
您在那里找到了答案 - 只需使用 TimeSpan.Add。
如果您愿意,可以使用 LINQ 的 Enumerable.Aggregate 进行收集避免循环:
编辑:如果您想要扩展方法来执行此操作,您可以执行以下操作:
You have the answer there - just use TimeSpan.Add.
You can do the collection using LINQ's Enumerable.Aggregate if you want to avoid the loop:
Edit: If you want an extension method to do this, you could do:
当然。
Enumerable.Aggregate
只需要 < code>FuncT
对象并以某种方式聚合它们以产生新的T
的东西。所以你可以使用尤里的方法:或者,你也可以做一些事情就像蒂姆·科克建议的一样,使用
Enumerable.Sum
扩展方法:更新:以下是 VB.NET 的等效项:
Sure.
Enumerable.Aggregate
just needs aFunc<T, T, T>
-- something that takes twoT
objects and aggregates them in some way to product a newT
. So you can go with Yuriy's method:Or, you can also do something like what Tim Coker suggested, using the
Enumerable.Sum
extension method:Update: Here are the VB.NET equivalents:
您可以使用
Sum
方法添加每个TimeSpan
中的Ticks
值:You can use the
Sum
method to add theTicks
value from eachTimeSpan
:您需要对
TimeSpan.Ticks
求和,然后使用该值创建一个新的TimeSpan
You need to sum
TimeSpan.Ticks
then create a newTimeSpan
with that value