2016-06-07 9 views
0

Ich versuche, ein multidimensionales Array zu analysieren, das mit Swift n Ebenen tief ist. Ein Beispiel für die Eingabe, ist, dass drei Ebene tief ist:Parsen eines n-dimensionalen Arrays in swift

[+, 5, 4, ("+", 4, ("-", 7, 3))] 

Das Ziel des Codes ist das Element an arr nehmen [0] und in dieser Ebene des Arrays zu den anderen Sachen, dass der Betrieb tun .

3 verschachtelte For-Schleifen scheint der Weg zu diesem bestimmten Eingabe-Set zu sein, aber ich kann nicht herausfinden, wie Code geschrieben wird, der für Arrays arbeitet, die n Ebenen tief sind.

Danke.

+3

Haben Sie diese Frage nicht schon gestern gestellt? – NRitH

Antwort

0

Sieht aus, als ob Sie einen RPN-Rechner bauen. Anstelle von verschachtelten if, können Sie Rekursion verwenden:

func evaluate (stack: [AnyObject]) -> Double { 
    func apply(op: String, _ operand1: Double, _ operand2: Double) -> Double { 
     switch op { 
     case "+": return operand1 + operand2 
     case "-": return operand1 - operand2 
     case "x": return operand1 * operand2 
     case "/": return operand1/operand2 
     default: 
      print("Invalid operator: \(op)") 
      return Double.NaN 
     } 
    } 

    guard let op = stack[0] as? String else { 
     fatalError("stack must begin with an operator") 
    } 

    switch (stack[1], stack[2]) { 
    case (let operand1 as [AnyObject], let operand2 as [AnyObject]): 
     return apply(op, evaluate(operand1), evaluate(operand2)) 
    case (let operand1 as [AnyObject], let operand2 as Double): 
     return apply(op, evaluate(operand1), operand2) 
    case (let operand1 as Double, let operand2 as [AnyObject]): 
     return apply(op, operand1, evaluate(operand2)) 
    case (let operand1 as Double, let operand2 as Double): 
     return apply(op, operand1, operand2) 
    default: 
     print("I don't know how to handle this: \(stack)") 
     return Double.NaN 
    } 
} 

let rpnStack = ["+", 5, ["+", 4, [ "-", 7, 3]]] 
let result = evaluate(rpnStack) 
print(result) // 13 

Dies setzt voraus, offenbar der Ausdruck Baum auf jeder Ebene genau drei Knoten enthält.

Verwandte Themen