Mic*_*ola 3 arrays dictionary swift
如何搜索匹配的字典数组并将该匹配替换为另一个字典?
哪里lineItemsArray:Array是字典的一个数组,我期待搜索数组中的元素进行匹配,返回匹配的索引,然后更换字典,一个新的,索引.数组中的每个字典都包含一个recordId用于搜索的键.每个recordId都是唯一的,搜索将始终返回单个结果.
将替换匹配记录的新数据由Web服务生成并作为字典返回.(见下文)
以下是我的具体问题:
这是一个lineItemsArray样子:
[{
buyFromCompanyId = 1;
buyFromJobId = 5276;
comment = "";
componentId = 2331;
description = "";
fulfillmentStatus = 0;
globalJobId = 2470;
inventoryItemId = 1824;
isSerialized = 1;
itemClass = 0;
itemQty = 2;
lineItemId = 50853;
priceRecordId = 152693;
productName = "Bose L1 Compact";
qtyAlreadyPulled = 0;
qtyRate1 = 3;
qtyRate2 = "";
qtyTotalStock = "";
rate1 = "";
rate2 = "";
sellToCompanyId = 1;
}, {
buyFromCompanyId = 1;
buyFromJobId = 5276;
comment = "";
componentId = "";
description = "";
fulfillmentStatus = 0;
globalJobId = 2470;
inventoryItemId = 2010;
isSerialized = "";
itemClass = "";
itemQty = 2;
lineItemId = 50854;
priceRecordId = 152695;
productName = "C13 IEC Cable (Standard)";
qtyAlreadyPulled = 0;
qtyRate1 = "";
qtyRate2 = "";
qtyTotalStock = 23;
}, {
buyFromCompanyId = 1;
buyFromJobId = 5276;
comment = "";
componentId = "";
description = "";
fulfillmentStatus = 0;
globalJobId = 2470;
inventoryItemId = 2046;
isSerialized = 1;
itemClass = "";
itemQty = 2;
lineItemId = 50855;
priceRecordId = 152697;
productName = "L1 compact amp unit";
qtyAlreadyPulled = 0;
qtyRate1 = "";
qtyRate2 = "";
qtyTotalStock = 1;
}]
Run Code Online (Sandbox Code Playgroud)
不幸的是,Swift的全局find方法寻找特定值而不是匹配谓词的值.你可以用这种方式定义自己的:
func find<C: CollectionType>(collection: C, predicate: (C.Generator.Element) -> Bool) -> C.Index? {
for index in collection.startIndex ..< collection.endIndex {
if predicate(collection[index]) {
return index
}
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
然后你可以找到有问题的字典的索引并直接替换它:
let index = find(lineItemsArray) { $0["recordId"] == replaceKey }
if let index = index {
lineItemsArray[index] = newDictionary
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8530 次 |
| 最近记录: |