2016-11-09 30 views
0

計算具體的數組元素的總和我有兩個數組如何用vb.net

x = [1 1 1 0 2 3 1 1] 

y = [1 2 3 4 5 6 7 8] 

如何計算Ÿ對所有x(i) = 1得到結果1+2+3+7+8元素的總和?

我已經使用了循環,如果再方法來計算這樣

if x(i) = 1 then sum = sum + y(i)

總和值有其他方法得到的結果(求和,平均值,計數......)?

謝謝。

回答

2

由於您只想對y中的數字進行求和,對應於x中的1而不是x中的0,則可以乘以x * y,這看起來比If更清潔。這裏有一些方法

Dim x = {1, 1, 1, 0, 0, 0, 1, 1} 
Dim y = {1, 2, 3, 4, 5, 6, 7, 8} 

' using a for loop 
Dim sum1 As Integer = 0 
For i = 0 To x.Length - 1 
    sum1 += If(x(i) = 1, 1, 0) * y(i) 
Next 
Console.WriteLine(sum1) 

' using LINQ #1 
Dim sum2 As Integer = x.Select(Function(i, index) If(i = 1, 1, 0) * y(index)).Sum() 
Console.WriteLine(sum2) 

' using LINQ #2 
Dim sum3 As Integer = x.Zip(y, Function(x1, y1) If(x1 = 1, 1, 0) * y1).Sum() 
Console.WriteLine(sum3) 

' using LINQ #3 
Dim sum4 As Integer = Enumerable.Range(0, x.Length).Sum(Function(i) If(x(i) = 1, 1, 0) * y(i)) 
Console.WriteLine(sum4) 

Console.ReadLine() 
+0

但是,如果數組x的元素不僅是0或1,但也有其他類似的[0 0 1 2 0 3 0 1 0] .....如何使用LINQ來選擇和求和x(i)= 1的y(i)值?謝謝。 –

+0

也許'x = [1 1 1 0 0 0 1 1]'以外的東西會使這個更清楚嗎?但我會編輯我的答案。 – djv

1

For是很清楚,所以我不知道爲什麼你不會使用它,但你可以使用LINQ這也:

Sub Main 
    Dim x = {1, 1, 1, 0, 2, 3, 1, 1} 
    Dim y = {1, 2, 3, 4, 5, 6, 7, 8} 

    Dim sum = y.Where(Function(v, i) x(i) = 1).Sum() 

    Console.WriteLine("Sum is {0}", sum) 
End Sub 

打印

總和爲21