Domino 9 und frühere Versionen > ND9: Entwicklung

Effektiver Datenabgleich

(1/2) > >>

skywook:
Hallo,

ich müsste zwei Datenbestände vergleichen. Vielleicht habt ihr einen Tipp für mich.

Die Daten sind (beispielhaft) wie folgt aufgebaut:

[Produkt-A]
Inhalt A
Inhalt B
Inhalt C

[Produkt-B]
Inhalt A
Inhalt F

[Produkt-C]
Inhalt A
Inhalt C
Inhalt X
Inhalt Z

usw..

Würde die Daten in ein Array einlesen um diese dann mit dem Bestand des Vormonats zu vergleichen.

Folgende Idee:
Eindimensionaler Array, Aufbau wie folgt:
ProduktA#InhaltA
ProduktA#InhaltB
ProduktB#InhaltA
usw

Bei dieser Idee bin ich bei ca. 200.000 Dimensionen - eventuell ist dann die Verarbeitung zu langsam?

Der zweidimensionale Array fällt aus da die zweite Dimension nicht fest definiert werden kann (oder eventuell die zweite Dimension als Array).

Wäre hier eine Liste oder eine Klasse effektiver?

Tode:
Ich würde mit Listen von Listen arbeiten, das dürfte Performancemässig am besten sein. Damit Du Dir nicht die FInger brichst, würde ich eine Klasse "ListEnhanced" definieren:


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

    End Sub

--- Ende Code ---

Und dann so:


--- Code: ---Dim listsEnhanced List as ListEnhanced

Forall ProduktName in .... '- irgendwie aufbauen
   If Not Iselement( listsEnhanced( ProduktName ) ) then
       Set listsEnhanced( ProduktName ) = New ListEnhanced
   End If
   Forall Inhalt in ...
       listsEnhanced( ProduktName ).listContent( Inhalt ) = Inhalt
   End Forall
End Forall

--- Ende Code ---

Damit kannst Du dann sehr schnell zwei Listen aus unterschiedlicher Herkunft vergleichen...

Der IsElement- Vergleich bei Listen ist saumässig schnell.

Ralf_B:
Als ich mal vor diesem Problem stand, hab ich mal versucht eine Sortierung (shell sort) zu machen und dann zu vergleichen,
Das hab ich aber recht schnell wieder verworfen, weil das viel Speicher und Zeit gekostet hat.

Ich habe dann eindimensionale Array's aufgebaut (mit Redim) und dann, fast wie empfolen , mit ArrygetIndex vergleichen.
Das passte dann.

Viel Erfolg.
 

Peter Klett:
Listen sind Arrays eindeutig vorzuziehen, da die nahezu keine Größenbeschränkung kennen

skywook:
Funktioniert, ist wirklich super schnell.

Aber wie Frage ich dann den listContent ab?

Funktioniert das auch mit IsElement oder muss ich diesen mit einer Schleife durchlaufen?

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln