2014-09-23 80 views
0

我有一個包含18個問題的數組。每個問題有4種可能的答案,從1到4。我想指出有多少人回答question1等等。我的代碼如下。你有更好的方法來做到這一點嗎?我無法列出所有這18個問題。vb.net計數一個有4種可能性的數組元素

Dim question(18) as string 
Dim ans1Arr() As String = {0, 0, 0, 0} 
Dim ans2Arr() As String = {0, 0, 0, 0} 

    If ques(0) = 1 Then 
     ans1Arr(0) = ans1Arr(0) + 1 
    ElseIf ques(0) = 2 Then 
     ans1Arr(1) = ans1Arr(1) + 1 
    ElseIf ques(0) = 3 Then 
     ans1Arr(2) = ans1Arr(2) + 1 
    ElseIf ques(0) = 4 Then 
     ans1Arr(3) = ans1Arr(3) + 1 
    End If 

    If ques(1) = 1 Then 
     ans2Arr(0) = ans2Arr(0) + 1 
    ElseIf ques(1) = 2 Then 
     ans2Arr(1) = ans2Arr(1) + 1 
    ElseIf ques(1) = 3 Then 
     ans2Arr(2) = ans2Arr(2) + 1 
    ElseIf ques(1) = 4 Then 
     ans2Arr(3) = ans1Arr(3) + 1 
    End If 
+2

嗯......只要有w ^作爲執行相同操作的方式'For Each'元素的數組... – Tallmaris 2014-09-23 14:47:43

+0

您應該將Option Strict設置爲ON。 '{0,0,0,0}'是一個'Int32()'。另外爲什麼不使用自定義類型,比如'Question'和'Answer'包含有意義的屬性? – 2014-09-23 14:51:33

+0

謝謝,Tallmaris,但代碼與我的幾乎相同。謝謝,蒂姆。我不知道怎麼樣,請你給我看看。幫幫我! – user3754205 2014-09-23 15:02:04

回答

1

您可以使用Lookup(Of TKey, TElement)這是類似的除了它返回一個空序列的事實詞典如果密鑰不可用:

Dim lookup = question.ToLookup(Function(qNum) qNum) 
Dim countAnswerOne As Int32 = lookup(1).Count() 
Dim countAnswerTwo As Int32 = lookup(2).Count() 
' ... ' 

可以很容易地進行測試

Dim question(18) As Int32 
Dim rnd As New Random() 
For i As Int32 = 0 To 17 
    question(i) = rnd.Next(1, 5) 
Next 
Dim lookup = question.ToLookup(Function(qNum) qNum) 

Console.Write("One: {0} Two: {1} Three: {2} Four: {3}", 
    lookup(1).Count(), lookup(2).Count(), lookup(3).Count(), lookup(4).Count()) 

,輸出FE:One: 5 Two: 6 Three: 5 Four: 2

+0

謝謝,時間。我是這個新手。我總是按傳統方式編碼。我查看MS網站獲取更多信息,但仍然沒有得到它 – user3754205 2014-09-23 15:17:58

相關問題