Domino 9 und frühere Versionen > ND9: Entwicklung

Effektiver Datenabgleich

<< < (2/2)

Peter Klett:
Liste in Liste geht m.W. leider nicht, wenn das Listenelement ein Array ist, musst Du es wie ein Array behandeln (also z.B. durchlaufen).

Kannst aber auch das Array dann in eine Liste schreiben.

--- Code: ---Dim liste1 List As Variant
Dim liste2 List As Integer

liste1 ("xxx") = Split ("a,b,c", ",")

If Iselement (liste1 ("xxx")) Then
   Erase liste2
   Forall element In liste1 ("xxx")
      liste2 (element) = 1
   End Forall
   If Iselement (liste2 ("b")) Then
      'Eintrag b in liste1 ("xxx") gefunden
   End If
End If

--- Ende Code ---

Kommt drauf an, was Du konkret damit machen willst. Bei häufigen Suchen innerhalb des Array vielleicht sinnvoll

Tode:
@skywook: Da die Member- Variable listContent public ist und auch wieder eine Liste, fragst Du die ganz normal ebenfalls mit IsElement ab:


--- Code: ---If IsElement( listsEnhanced( ProduktName ).listContent( Inhalt ) ) then
    '...gefunden
End If
--- Ende Code ---

oder wenn Du schon ein Objekt der Klasse ListEnhanced hast:


--- Code: ---If IsElement( myListEnhanced.listContent( Inhalt ) ) then
    '...gefunden
End If
--- Ende Code ---

@Peter: Deshalb ja die "Hilfsklasse", die ihrerseits eine Liste als Public Member- Variable hat... Damit kriegt man dann Listen in Listen.

Man könnte jetzt natürlich auch die Hilfsklasse erweitern um weitere Funktionen wie hasMember( ) und getMember() und addMember, dann spart man sich diese vielen Klammern und auch den direkt- Zugriff auf die Member- Variable:


--- Code: ---Class ListEnhanced
    Public listContent List as Variant
    Sub New()

    End Sub
    Function hasMember( strMember as String ) as Boolean
        hasMember = IsElement( Me.listContent( strMember ) )
    End Function
    Function getMember( strMember as String ) as Variant
        If Me.hasMember( strMember ) then
          getMember = Me.listContent( strMember )
        End If
    End Function
    Sub addMember( strMember as String, varValue as Variant )
        Me.listContent( strMember ) = varValue
    End Sub

--- Ende Code ---

Dann würde der obige Code so aussehen:


--- Code: ---If listsEnhanced( ProduktName ).hasMember( Inhalt ) then
    '...gefunden: vergleichen
    content = listsEnhanced( ProduktName ).getMember( Inhalt )
End If

'- oder

If myListEnhanced.hasMember( Inhalt ) then
    '...gefunden: vergleichen
    content = myListEnhanced.getMember( Inhalt )
End If

--- Ende Code ---




Tode:
Und das kann man dann immer weiter spinnen... wie wäre es mit weiteren Management- Funktionen:


--- Code: ---Class ListEnhanced
    Private m_listContent List as Variant
    Private m_lngCount as Long
    Sub New()
        Me.m_lngCount = 0
    End Sub
    Function hasMember( strMember as String ) as Boolean
        hasMember = IsElement( Me.m_listContent ( strMember ) )
    End Function
    Function getMember( strMember as String ) as Variant
        If Me.hasMember( strMember ) then
          getMember = Me.m_listContent ( strMember )
        End If
    End Function
    Sub addMember( strMember as String, varValue as Variant )
        If not Me.hasMember( strMember ) then
            Me.m_lngCount = Me.m_lngCount + 1
        End If
        Me.m_listContent ( strMember ) = varValue
    End Sub
    Sub removeMember( strMember as String )
        If Me.hasMember( strMember ) then
          Me.m_lngCount = Me.m_lngCount - 1
          Erase Me.m_listContent( strMember )
        End If
    End Sub
    Sub removeAllMembers()
        Erase Me.m_listContent
        Me.m_lngCount = 0
    End Sub
    Public Property Get length as Long
        length = Me.m_lngCount
    End Property
    Public Property Get listContent as Variant
        listContent = Me.m_listContent
    End Property
    Public Property Get isEmpty as Boolean
        isEmpty = (Me.m_lngCount = 0)
    End Property
    
--- Ende Code ---

Hier muss jetzt die Member- Variable für die Liste Private sein, damit sie nicht mehr von außen manipuliert werden kann (was den count invalidieren würde), damit ist nur noch ein Zugriff über die Funktionen möglich oder ein Read- Only Zugriff über die Property...

DISCLAIMER: Der Code ist im Browser runtergetippt. Er enthält vermutlich Tippfehler und -ganz wichtig- KEINERLEI Error- Handling. Solchen Code würde es bei mir produktiv nie geben. Aber als Basis ist er vermutlich brauchbar.

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln