使用LINQの...
Dim average As Double = y.Average()
を設定
Function getAverage(y As Double()) As Double
Dim z As Double
For Each i As Double In y
z += i
Next
Return z/y.Length
End Function
あなたがLINQので行うことができますもう一つは除外していますあなたの平均からの特定の値。この例では、myNumbers()
の9つの項目を10に設定し、10番目の項目をゼロに設定しています。私は最初にLinqを使って0より大きい数値をフィルタリングし、Average
集約を実行します。
Dim myNumbers(9) As Double
For i As Integer = 0 To 8 Step 1
myNumbers(i) = 10
Next i
myNumbers(9) = 0
Dim average As Double = myNumbers.Where(Function(num) num > 0).Average()
'Optionally, you could also do it this way:
Dim average2 As Double = (From num In myNumbers
Where num > 0).Average()
MessageBox.Show(average)
クラスを使用するとさらに改善されます。このクラスThing
を考えてみましょう:
Public Class Thing
Public Name As String = ""
Public Number As Double = 0
Public Sub New (name As String, number As Double)
Me.Name= name
Me.Number = number
End Sub
End Class
私はそのクラスの集まりと.Where
さらに強力になっを作成することができます。あなたは.NET開発者なら、あなたは単に簡単な環境を必要とLINQのかを使用することを学ぶしたい場合は、この例では、私はThing.Name
Dim things As List(Of Thing) = New List(Of Thing)()
things.Add(New Thing("Michael", 10))
things.Add(New Thing("Michael", 5))
things.Add(New Thing("Michael", 7))
things.Add(New Thing("Michael", 9))
things.Add(New Thing("Rian", 10))
things.Add(New Thing("Rian", 10))
things.Add(New Thing("Rian", 10))
Dim AverageMichael As Double = things.Where(Function(thing) thing.Name = "Michael").Average(Function(thing) thing.Number)
Dim AverageRian As Double = things.Where(Function(thing) thing.Name = "Rian").Average(Function(thing) thing.Number)
MessageBox.Show(AverageMichael)
MessageBox.Show(AverageRian)
サイドノート
によってを平均化しています.NETコードをテストしたら、LinqPadを強くお勧めします。私はLinqPadをこの記事のすべてのコードに使用しました。
http://www.linqpad.net/
どのような用途ですか? http://www.java2s.com/Code/VB/LINQ/UsingAggregatingAnnarray.htmまたはhttps://msdn.microsoft.com/en-us/library/bb546138(v=vs.100).aspxの番号を参照してください –