Arrays 使用Swift计算嵌套数组中的唯一ID
我有下面的嵌套数组,我试图计算有多少具有唯一Arrays 使用Swift计算嵌套数组中的唯一ID,arrays,swift,Arrays,Swift,我有下面的嵌套数组,我试图计算有多少具有唯一id的项。在下面的数组中,计数应为2 数组的类型为List它来自领域 class SolData: Object { @objc dynamic var uid = ""; @objc dynamic var id = ""; } extension SolData: ListDiffable { func diffIdentifier() -> NSObjectProtocol { return uid
id
的项。在下面的数组中,计数应为2
数组的类型为List
它来自领域
class SolData: Object {
@objc dynamic var uid = "";
@objc dynamic var id = "";
}
extension SolData: ListDiffable {
func diffIdentifier() -> NSObjectProtocol {
return uid as NSObjectProtocol
}
func isEqual(toDiffableObject object: ListDiffable?) -> Bool {
if let object = object as? SolData {
return uid == object.uid
}
return false
}
}
阵列的打印
(
[0] SolData {
uid = sdasd;
id = jmX3;
},
[1] SolData {
uid = gfd;
id = jmX3;
},
[2] SolData {
uid = hgfd;
id = jmX3;
},
[3] SolData {
uid = terw;
id = jmX3;
},
[4] SolData {
uid = fgg;
id = GFdda;
}
)
我试着以以下方式使用map
var count = 0;
var prevId = "";
let uniqueSols = diff.sol.map{ (s) -> Int in
if s.id != prevId {
count = count + 1;
prevId = s.id;
}
return count;
}
print(uniqueSols);
但是我得到了以下错误
SWIFT运行时错误:无法指定字段“\u transform”的类型。损坏的类型名称为'q_7ElementSTQzc'
2018-10-27 14:26:08.793528+0300应用程序[23634:611928]SWIFT运行时错误:无法对字段类型“_transform”进行demangle。损坏的类型名称为'q_7ElementSTQzc',_transform:())
为了重现您的代码,我将模拟
SolData
类,并添加一个初始值设定项以简化实例化:
class SolData {
var uid: String = ""
var id: String = ""
init(uid: String, id: String) {
self.uid = uid
self.id = id
}
}
让我们创建几个实例:
let zero = SolData(uid: "sdasd", id: "jmX3")
let one = SolData(uid: "gfd", id: "jmX3")
let two = SolData(uid: "hgfd", id: "jmX3")
let three = SolData(uid: "terw", id: "jmX3")
let four = SolData(uid: "fgg", id: "GFdda")
并将它们分组到一个数组中:
let array = [zero, one, two, three, four]
要仅获取具有唯一ID的实例,请使用:
如果需要具有唯一ID的实例数组,请使用以下命令:
let instancesWithUniqueIds = array.reduce(into: [SolData]()) { accumulator, element in
if accumulator.allSatisfy({ $0.id != element.id}) {
accumulator.append(element)
}
}
acculator.allsuccess({$0.id!=element.id})
可能被acculator.contains(element)
替换,并使SolData
符合Hashable
您开始使用的数组是什么?什么是jmX3
和GFdda
?什么是字段\u变换?一定要让你的问题很容易在游戏中重现并添加更多代码。没有_变换字段。对我来说,这似乎是一个奇怪的错误。什么是listdifvable
和Object
?您想知道唯一的元素还是它们的计数map
用于将n
输入元素转换为n
输出元素。要在1
输出元素中打开n
输入元素(计数将仅为一个输出),您可以使用reduce
。为什么要投反对票?我一直在问这个问题,老兄!谢谢,这正是我需要的!嘿@Carpsen90我一直在讨论这个问题,但我还有一个问题与上述有关。我在应用程序中有一个不同的部分,我对每个循环使用,并将解决方案附加到var arr:[SolData]=[SolData]()代码>。当我试图减少该数组时,它会给我以下错误无法将类型“Set”的值分配给类型“[SolData]”
为什么在这种情况下上述方法不能减少工作?@Ando这对于新问题更合适,但我添加了一些代码来提供一个唯一实例的数组,而不是原来的问题:唯一ID的计数。谢谢,太多了!我认为这是对答案的一个很好的补充,因为这两个词是常用的;此外,我现在可以从你的答案的第二部分中计算出减少的结果。再次感谢你!
let uniqueIdsCount = uniqueIds.count //2
let instancesWithUniqueIds = array.reduce(into: [SolData]()) { accumulator, element in
if accumulator.allSatisfy({ $0.id != element.id}) {
accumulator.append(element)
}
}