   case MissingField
   case WrongType(rawValue: AnyObject, expectedType: String)
   case WrongEnumRawValue(rawValue: AnyObject, enumType: String)
-  case ArrayElementErrors([Int: JsonDecodeError])
-  case DictionaryErrors([String: JsonDecodeError])
-  case StructErrors(type: String, errors: [String: JsonDecodeError])
+  case ArrayElementErrors([(Int, JsonDecodeError)])
+  case DictionaryErrors([(String, JsonDecodeError)])
+  case StructErrors(type: String, errors: [(String, JsonDecodeError)])
 }
 
 class JsonDecoder {
-  var errors: [String: JsonDecodeError] = [:]
+  var errors: [(String, JsonDecodeError)] = []
   let dict: [String : AnyObject]
 
   init(json: AnyObject) throws {

          result[key] = try decodeValue(val)
        }
        catch let error as JsonDecodeError {
          errors["\(key)"] = error
        }
      }


          result.append(try decodeElement(element))
        }
        catch let error as JsonDecodeError {
          errors.append((index, error))
        }
      }

