Program Club

배열에서 for each 루프를 어떻게 사용할 수 있습니까?

proclub 2020. 11. 26. 20:09
반응형

배열에서 for each 루프를 어떻게 사용할 수 있습니까?


문자열 배열이 있습니다.

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)

for each 루프 구조는 컬렉션 객체를 중심으로 설계되었습니다. For .. 각 루프에는 변형 유형 또는 개체가 필요합니다. "요소"변수가 변형으로 입력되므로 "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

Fink가 제안한 것과 같은 카운터 변수를 사용합니다. 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(ByVal stringToBeFound As String, ByVal arr As Variant) As Boolean
For Each element In arr
    If element = stringToBeFound Then
        isInArray = True
        Exit Function
    End If
Next element
End Function

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

반응형