programing

어레이의 각 루프에 대해를 사용하려면 어떻게 해야 합니까?

yellowcard 2023. 4. 10. 21:31
반응형

어레이의 각 루프에 대해를 사용하려면 어떻게 해야 합니까?

문자열 배열:

Dim sArray(4) as String

배열 내의 각 문자열을 확인합니다.

for each element in sarray
  do_something(element)
next element

do_something파라미터로서 문자열을 받아들인다.

요소를 문자열로 전달하는 동안 오류가 발생했습니다.

ByRef 인수 불일치

요소를 문자열로 변환해야 합니까?

요소는 변형이어야 하므로 문자열로 선언할 수 없습니다.ByVal을 전달하면 문자열인 경우 함수에서 변형을 허용해야 합니다.

Public Sub example()
    Dim sArray(4) As string
    Dim element As variant

    For Each element In sArray
        do_something element
    Next element
End Sub


Sub do_something(ByVal e As String)
    
End Sub

다른 옵션은 전달하기 전에 배리언트를 문자열로 변환하는 것입니다.

  do_something CStr(element)

각 루프 구조의 는 컬렉션 오브젝트를 중심으로 설계됩니다.A의 경우...각 루프에는 다른 유형 또는 개체가 필요합니다."element" 변수가 변형으로 입력되기 때문에 "do_something" 함수는 변형 유형을 수용해야 합니다. 또는 다음과 같이 루프를 수정할 수 있습니다.

Public Sub Example()

    Dim sArray(4) As String
    Dim i As Long

    For i = LBound(sArray) To UBound(sArray)
        do_something sArray(i)
    Next i

End Sub

핑크가 제안하는 카운터 변수를 사용합니다.For Each와 ByRef를 전달하려면(긴 문자열에 더 효율적일 수 있음) CStr을 사용하여 요소를 문자열로 캐스팅해야 합니다.

Sub Example()

    Dim vItm As Variant
    Dim aStrings(1 To 4) As String

    aStrings(1) = "one": aStrings(2) = "two": aStrings(3) = "three": aStrings(4) = "four"

    For Each vItm In aStrings
        do_something CStr(vItm)
    Next vItm

End Sub

Function do_something(ByRef sInput As String)

    Debug.Print sInput

End Function

다음과 같은 간단한 inArray 함수는 어떻습니까?

Function isInArray(ByRef stringToBeFound As String, ByRef arr As Variant) As Boolean
For Each element In arr
    If element = stringToBeFound Then
        isInArray = True
        Exit Function
    End If
Next element
End Function

이 경우에 대해 다른 대안이 받아들여진다면, 저는 UBound를 제안:

For i = 1 to UBound(nameofthearray)
   your code here
next i

언급URL : https://stackoverflow.com/questions/4228137/how-can-i-use-a-for-each-loop-on-an-array

반응형