将数组与vb.net中的数字进行比较

时间:2015-06-22 11:17:28

标签: arrays vb.net

我需要一种方法来比较vb.net中的两个数组并将结果保存在第三个数组中:

Dim KonRes(3) As Integer
Dim UserRes(3) As Integer
Dim YelRed(3) As Integer

KonRes(0) = 1
KonRes(1) = 2
KonRes(2) = 3
KonRes(3) = 4

UserRes(0) = 4
UserRes(1) = 3
UserRes(2) = 2
UserRes(3) = 1

如何在声明变量 YelRed 中比较这些数组我应该有这样的结果:

If UserRes(0) = KonRes(0) Then
YelRed(0) = 2
If UserRes(0) = KonRes(1 or 2 or 3) Then
YelRed(0) = 1

如果UserRes(0)不包含KonRes中的任何数字,则YelRed(0)应为0.此外,它不应该产生重复结果,换句话说,如果它已经检查过UserRes(0)= KonRes( 0)然后它不应该在下一次检查中检查KonRes(0)。如果这些数组完全相同,那么比较它不是问题,我的问题是将一个数组的每个值与另一个数组进行比较,并收集结果。有什么建议吗?

6 个答案:

答案 0 :(得分:2)

有几种基本方法可以检查整数数组中的值。第一种是通过循环遍历数组中的每个值来手动搜索,如果您需要进行复杂的比较,这可能是您想要的。

其次是.Contains()方法。它使用起来比较简单,但只会给你一个布尔值,指示值是否在数组中。例如:

If KonRes.Contains(UserRes(0)) Then YelRed(0) = 1

最后,还有IndexOf()函数。它搜索匹配并返回匹配的索引(如果找到),或者返回低于数组下限的索引(对于典型的基于0的数组,为-1)。正如我从上面的评论中理解你的需求,这段代码应该可以解决问题:

For i As Integer = 0 To 3
    Select Case IndexOf(KonRes, UserRes(i))
        Case i   'Matching postion
            YelRed(i) = 2
        Case -1   'No match found
            YelRed(i) = 0
        Case Else   'Match found at another position
            YelRed(i) = 1
    End Select
Next i
编辑:在@Sastreen澄清之前,我误解了重复的资格。这里的重写是为了不将相同的索引计算为匹配两次:

Dim processed(3) As Boolean
For i As Integer = 0 To 3
    YelRed(i) = 0
    If KonRes(i) = UserRes(i) And Not processed(i) Then
        processed(i) = True
        YelRed(i) = 2
    Else
        For j As Integer = 0 To 3
            If KonRes(j) = UserRes(i) Then
                processed(j) = True
                YelRed(i) = 1
                Exit For
            End If
        Next j
    End If
Next i

答案 1 :(得分:1)

  

如果UserRes(0) = KonRes(0)表示他们在两个人中处于同一位置   数组,然后是YelRed(0) = 2,如果UserRes(0) = KonRes(1,2,3)那么数字是   在那里,但不是在同一个位置,所以YelRed(0) =1和数字   不在第二个数组中,它必须为0。

使用For - 循环:

For i As Int32 = 0 To KonRes.Length - 1
    If KonRes(i) = UserRes(i) Then
        ' Same position '
        YelRed(i) = 2
    ElseIf UserRes.Contains(KonRes(i)) Then
        ' Other  position '
        YelRed(i) = 1
    Else
        ' Not contained '
        YelRed(i) = 0
    End If
Next

答案 2 :(得分:1)

您可以使用嵌套的For循环遍历两个数组进行比较,然后随时使用Exit For离开。

indicesToIgnore用于确保它不会“产生重复结果”(使用IndexOfcontains方法更难实现。)

  

此外,它不应该重复结果,换句话说,如果它已经检查了UserRes(0)= KonRes(0),那么它不应该在下一次检查中检查KonRes(0)。

Dim indicesToIgnore as New List(Of Integer)

'go through first array
For i as Integer = 0 to UserRes.length - 1 Step 1
    'go through second array
    For j as Integer = 0 to KonRes.length- 1 Step 1
        'if the values are equal, check whether same index, then exit for
        If (Not indicesToIgnore.contains(j) AndAlso UserRes(i) = KonRes(j)) Then
            If i=j Then
                YelRed(i) = 2
                indicesToIgnore.add(j)
            Else
                YelRed(i) = 1
            End If   
        Exit For
        End If
    Next
Next

您无需随时将YelRed(i)设置为0,因为它默认为此。您只需要确保YelRed与其他数组具有相同的大小。

如果您还希望它不查看KonRes值(对于重复项),如果它包含不同的索引,只需在indicesToIgnore.add(j)的末尾添加Else(在{{1之后)也是。

答案 3 :(得分:0)

我认为如果KonRes(0)= UserRes(0)然后YelRed(0)= 1,那么这将完成工作,否则YelRed(0)= 2

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "http://localhost:1337/person/create",
  "method": "POST",
  "headers": {
    "content-type": "application/json"
  },
  "data": "{'companyID':'DEV','firstName':'Radha','lastName':'A',  'otherIDs': [123,345] }"
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

答案 4 :(得分:0)

你没有告诉我们输出应该是什么。这有点让人困惑。就我而言,它将是{1,1,0,0}。如果要用2 for循环完成。在那里循环KonRes中的所有内容,而另一个循环在UserRes中尚未检查。

    For k As Integer = 0 To KonRes.Length - 1
        If KonRes(k) = UserRes(k) Then
            YelRed(k) = 2
        Else
            YelRed(k) = 0

            For u As Integer = k + 1 To UserRes.Length - 1
                If KonRes(k) = UserRes(u) Then
                    YelRed(k) = 1
                    Exit For
                End If
            Next
        End If
    Next

答案 5 :(得分:0)

您可以使用数组中的比较。

Dim iNextActivityTypeCd As Integer = 18400 Dim activities()As Integer = {1,18400,2300,3423}

如果activities.Contains(iNextActivityTypeCd)则    Dim foo = 1 结束如果