массивы vb.net и / или оператор - PullRequest
0 голосов
/ 02 марта 2019
temp = 0
count = 0

Do
    If arraywinner(count) = first(0) Or first(1) Or first(2) Or first(3) Or first(4) Or first(5) Then
        temp = temp + 1
    End If

    count = count + 1
Loop Until count > 5

Это мой код ... Я пытаюсь сравнить значение моего массива с каждым значением из другого массива, и если есть такое же число, переменная temp будет увеличиваться, но проблема здесь заключается в том, чточто это работает.Значение 1 2 3 4 5 6 не то, что я ожидаю, может кто-то помочь, пожалуйста

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Вот четыре других метода.Это зависит от того, с каким кодом вы чувствуете себя комфортно и насколько легко его читать.Каждый из них дает одинаковые результаты.

Private Sub FindMatch()
    Dim arraywinner() As Integer = {1, 4, 27, 39, 41, 46}
    Dim first() As Integer = {1, 2, 3, 4, 5, 6}
    'Method 1 a nested For
    'Using a For Each so the arrays can be any size
    For Each winner In arraywinner
        For Each f In first
            If f = winner Then
                MessageBox.Show($"Found {f} Winner (Using Nested For Each)")
            End If
        Next
    Next
    'Method 2 using .Contains 
    For Each winner In arraywinner
        If first.Contains(winner) Then
            MessageBox.Show($"Found a winner number {winner} (Using .Contains)")
        End If
    Next
    'Method 3 using .Intersect
    'Think of 2 circles containing the numbers in the arrays. Where they overlap would be the intersection.
    Dim Matches As IEnumerable(Of Integer) = arraywinner.Intersect(first)
    For Each i As Integer In Matches
        MessageBox.Show($"Winner Is {i} (Using Intersect)")
    Next
    'Method 4
    'The Linq query
    'From all the Integers in arraywinner
    'Where - set a condition - The first array contains i
    'Select - just the integers that meet the condition
    'LinqResult - contains just those integers
    'It is IEnumerable(Of Integer) 
    'IEnumerable means it can be accessed with a For Each
    Dim LinqResult = From i In arraywinner
                     Where first.Contains(i)
                     Select i
    For Each i In LinqResult
        MessageBox.Show($"Winner {i} (Using Linq Query")
    Next

End Sub
0 голосов
/ 02 марта 2019

Это должно дать результаты, которые вы ищете.«OrElse» используется вместо старого «Or», потому что оно замыкает сравнение, означая, что оператор перестает сравниваться после первого успешного сопоставления.«Или» в VB6 и более ранних версиях не закорачивали, и VB.NET сохраняет это поведение для облегчения задачи переноса старого кода.

    Dim temp As Integer = 0
    Dim arraywinner() As Integer = New Integer(5) {1, 4, 27, 39, 41, 46}
    Dim first() As Integer = New Integer(5) {1, 2, 3, 4, 5, 6}

    For count As Integer = 0 To 5
        If arraywinner(count) = first(0) _
            OrElse arraywinner(count) = first(1) _
            OrElse arraywinner(count) = first(2) _
            OrElse arraywinner(count) = first(3) _
            OrElse arraywinner(count) = first(4) _
            OrElse arraywinner(count) = first(5) Then
            temp = temp + 1
        End If
    Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...