Domino 9 und frühere Versionen > ND9: Entwicklung
Effektiver Datenabgleich
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