我有一个IEnumerable对象列表...每个对象都有许多属性,其中一个被称为:
Amount
金额是一个整数值。
我需要得到所有金额的总和。
我一直在迭代它们这样做:
For each item As MyObject In something
amount += item.Amount
Next item
我很好奇是否有一种方法我可以在此处使用函数来获得SUM,但只有这是一个性能增益...就像一个内衬,这更有效?
答案 0 :(得分:1)
由于您的要求,更简洁的解决方案是
Dim amount = something.Sum(Function(s) s.Amount)
但这可能比foreach循环慢。如果你有一个List而不是任何旧的IEnumerable,那么带有显式索引的for循环可能比你的foreach快一点:
For i = 0 to something.Count - 1
amount += something(i).Amount
Next
答案 1 :(得分:1)
我相信VB中的语法是
amount = something.Sum(Function (item) item.Amount)
Sum
函数是Linq的一部分,Function (item as MyObject) item.Amount)
语法是Lambda expression。 Sum
函数接受一个委托,它将在每个对象上执行以获取数值,然后它将对这些值求和并返回它们。
(您的源文件中可能需要Imports System.Linq
。)
答案 2 :(得分:0)
因为您使用了setContentView())
,所以我更喜欢IEnumerable(Of YourObject)
或foreach
而不是LINQ
循环。
For
是Lazy集合,只会在您每次调用时执行
因此,在IEnumerable
循环中,它将执行两次:For
和something.Count
,当foreach和something(i)
只执行一次时
使用LINQ
foreach
或扩展方法Dim mySum As Int32
For Each item As YourItem in something
mySum += item.Amount
Next
Sum