如何从多维数组中过滤内部数组

时间:2016-05-31 03:33:28

标签: ios arrays alamofire swifty-json dollar.swift

我正在尝试使用swift库{{基于safety_rating_id从数组(称为score)中提取变量(arraysubmission_id等) 1}}(https://github.com/ankurp/Dollar)' s Dollar方法,以便我以后可以发出POST请求(最终,我希望能够用拉出的数组替换参数中的硬编码值变量)与它们但我的find结果都返回nil。

这些是我想要的内部数组find submission_id来自此数组https://codeshare.io/zr1pw(第22-36行):

27

代码:

{
 "submission_id" : "27",
 "name" : "Equipment",
 "task_id" : "37",
 "points" : "10",
 "safety_rating_id" : 105,
 "score" : "9"
}, {
 "submission_id" : "27",
 "name" : "Emergency Equipment",
 "task_id" : "37",
 "points" : "10",
 "safety_rating_id" : 106,
"score" : "9"
}

更新

我能够使用 var array: [JSON] = [] func submitScore(onCompletion: () -> (), onError: ((NSError) -> ())? = nil) { guard let endPoint = Data.sharedInstance.submitScoreEndpoint else { print("Empty endpoint"); return } let user = Users() let test = $.find(self.array, callback: { $0 == 27 }) print(test) let Auth_header = [ "Authorization" : user.token, ] let parameters: [String:Array<[String:Int]>] = [ "ratings" : [ [ "safety_rating_id" : 105, "schedule_job_id" : 18, "score" : 9, "submission_id" : 27 ], [ "safety_rating_id" : 106, "schedule_job_id" : 18, "score" : 10, "submission_id" : 27 ] ] ] Alamofire.request(.POST, endPoint, headers: Auth_header, parameters: parameters, encoding: .JSON) .validate() .responseJSON { response in switch response.result { case .Success(let data): let json = JSON(data) print(json) onCompletion() case .Failure(let error): print("Request failed with error: \(error)") onError?(error) } } } 获取数组27但我想从两个submission_id数组 AND <中移除nametask_id / em>添加我从其他地方获得的submission_id : 27

我尝试使用schedule_job_id循环从我想要的变量创建自己的数组,但我一直遇到for in崩溃。这就是新数组的外观https://codeshare.io/3VJSo

for in loop error

最终我想做一个nil

3 个答案:

答案 0 :(得分:2)

我认为您使用的是$错误。 当你在$.find上调用self.array时,数组包含JSON对象,不确定对象究竟是什么,但我认为它是字典。 所以我认为你应该这样做:

let jsonWithMySubmissionId = self.array.filter ({ $0["submission_id"]! == 27 }).first

然后,我会避免这种力量打开字典。只是为了让你在一行代码中理解我的观点。

修改

然后你可以迭代数组并提取你的字段:

let jsonWithMySubmissionId = self.array.filter ({ $0["submission_id"]! == 27 })
for json in jsonWithMySubmissionId {
  json["name"] = nil
  json["task_id"] = nil
  ...
}

答案 1 :(得分:2)

因此,在回调内部传递的是数组中的每个元素,因此您将传递字典对象。所以如果你想在数组中找到一个特定的项目,你应该做

let test = $.find(array) { $0["submission_id"]! == "27" }

如果您希望数组中提交ID为27的所有元素都使用filter

let test = array.filter { $0["submission_id"]! == "27" }

要从字典对象中删除属性,您需要在阵列上的每个项目上调用removeValueForKey方法。

let jsonWithMySubmissionId = self.array.filter ({ $0["submission_id"]! == 27 })
for json in jsonWithMySubmissionId {
  json.removeValueForKey("name")
  json.removeValueForKey("task_id")
  ...
}

答案 2 :(得分:2)

for循环中的pickerkState = new UIPicker<string>(FieldDefinitions.StateField) { HeightRequest= DeviceDisplaySettings.defaultheight * 0.05 };; pickerState.Title = currentVM.State; pickerState.SelectedIndex = 0; pickerState.SelectedIndexChanged += (sender, args) => { pkState.Title = pkState.Items[pkState.SelectedIndex]; txtPostalCode.Focus(); }; 必须是dic的类型。因为您无法操纵NSMutableDictionary

第二件事是没有类似NSDictionary的方法。

您应该使用removeValueForKeyremoveObjectForKey

removeObjectsForKeys中,您必须传递参数数组(键作为参数)。

removeObjectsForKeys中,您可以传递一个字符串(键)作为参数。