[LUA] Doppelte Einträge in Tabelle mit Untertabellen finden?

Bl4ckSh33p

Newbie
Registriert
Mai 2004
Beiträge
4
Hallo. Ich habe nach ewigkeiten wieder angefangen zu programmieren und könnte ein wenig Hilfe beim finden von doppelten Einträgen in Tabellen brauchen.

Ich verwende Autoplay Media Studio von Indigorose und dieses nutzt LUA für den Code.
Ich habe eine Tabelle in der Untertabellen sind. Das ganze sieht in etwa so aus:

ModFilesTabelle
--->Modname1
------>Datei1
------>Datei2
------>Datei3
------>Datei4
--->Modname2
------>Datei5
------>Datei6
------>Datei1
------>Datei2
--->Modname3
------>Datei7
------>Datei8
------>Datei4
------>Datei6

Ich habe einige loops probiert, hatte damit aber bisher leider keinen erfolg.
Code:
for index, value in pairs(ModFilesTabelle) do
----
end

Kennt jemand einen schnellen/einfachen Weg die doppelten Dateien in den Untertabellen zu finden und sich zu "merken" welche Mods doppelte Dateien haben damit man den User darauf hinweisen kann, dass ModX und ModY die selbe Datei ändern?

Ich hab mir schon überlegt vielleicht eine Tabelle ohne Untertabellen zu verwenden wo einfach alle Mods mit Dateien aufgelistet sind:

Modtabelle
-->Mod1;Datei1
-->Mod1;Datei2
-->Mod2;Datei3
-->Mod2;Datei1
usw.

So könnte man mit einem einfachen loop alle einträge durchsuchen ob die Datei irgendwo enthalten ist.
Geht das auch anders/schöner ohne extra Tabelle?
 
Zuletzt bearbeitet:
Eine Möglichkeit:
Code:
local ModFilesTabelle={Modname1={
  "Datei1",
  "Datei2",
  "Datei3",
  "Datei4"
},
Modname2={
  "Datei5",
  "Datei6",
  "Datei1",
  "Datei2"
},
Modname3={
  "Datei7",
  "Datei8",
  "Datei4",
  "Datei6"
}
}

local Files={"Datei1","Datei2","Datei3","Datei4","Datei5","Datei6","Datei7","Datei8"};
local db={}

for i, v in pairs(Files) do
  db[v]={}
  for index, value in pairs(ModFilesTabelle) do
    for ii, vv in pairs(value) do
      if vv==v then
	table.insert(db[v], index)  
      end  
    end
  end
  if table.getn(db[v])>1 then
    print(v) 
    for iii, vvv in pairs(db[v]) do
      print(vvv)
    end
    print()
  end  
end
 
Vorwort: ich habe keine Ahnung von LUA

Ich würde eine HashTable anlegen, die als Schlüssel den Dateinamen verwendet.
In der Tabelle wird für jede Datei eine Liste von Mods angelegt die diese Datei verwenden.

Hier mal meine erste "Skizze":

Code:
-- für jede Datei wird eine Liste von Mods angelegt, die diese Datei verwenden
fileList = {}

for mod, datei in pairs(ModFilesTabelle) do
   
   if fileList[datei] then
	  modListe = fileList[datei]
	  table.insert(modListe, mod)
	  
   else
	  -- neue Mod-Liste unter Schlüssel datei anlegen und ersten Mod hinzufügen
	  fileList[datei] = {mod}
   end

 
end

Probiers einfach mal aus und melde dich mit dem Ergebnis und evtl. Fragen.
 
Zurück
Oben