2016-04-21 10 views
0

Ich habe die folgenden verschiedenen TypenVerschachtelte for-Schleifen-Iteration Alternativen

Types: 
R -> R1, R2, R3.... 
RE -> RE1, RE2, RE3.... 
REA -> REA1, REA2, REA3... 

They have the following relationship. 

Tree Structure

Für eine gegebene Liste der Elemente i über jedes Blatt zu durchlaufen wollen und einige Aktionen durchführen. Im Moment habe ich eine for-Schleife drei Ebenen verschachtelt.

for (r in Rs) { 
List<RE> REs = get(R); 
for(re in REs) { 
    List<REA> REAs = get(re); 
    for(rea in REAs) { 
    //do some processing for the list of items 
    for(each item in items) { 
     //process each item 
    } 
    } 
} 
} 

Gibt es einen besseren Ansatz für diese iterative?

Antwort

1

nicht sicher, welche Sprache verwenden Sie, aber man konnte diese Schnipsel verkürzen, indem nicht alle Listen in den Einheimischen zu speichern:

for (r in Rs) { 
    for (re in get(r)) { 
    for (rea in get(re)) { 
     for (item in rea) { 
     //process each item 
     } 
    } 
    } 
} 

Oder Sie können rekursiv gehen:

traverse(items) { 
    if (items.isLeaf()) { 
     // process items 
    } else { 
     for (item in items) { 
      traverse(item); 
     } 
    } 
} 
traverse(Rs) 
+0

so sollte ich sein Zuerst eine Baumstruktur aufbauen? Im Moment habe ich sie in Karten und Listen gespeichert. – Bharath

+0

@Bharath Karten und Listen ist bereits eine Baumstruktur. Sie können sie durchqueren. –