ios - 获取数组中的唯一项
问题描述
我有一个包含重复项目的数组,我只想获得唯一的项目,所以我这样做了:
let decoded = userDefaults.object(forKey: "shifts") as! Data
myShifts = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! [Shift]
filtered_shifts = myShifts.filter{$0.regionName == region && $0.cityName == city && $0.idService == idservice && $0.quantityStaff != 0}
for shift in filtered_shifts {
let decoded4 = userDefaults.object(forKey: "nationalities") as! Data
let decodedNationalities = NSKeyedUnarchiver.unarchiveObject(with: decoded4) as! [Nationality]
for nationality in decodedNationalities {
if nationality.id == shift.idNationality{
nationalitiesid.append(nationality.id)
nationalities.append(nationality.name)
}
}
}
uniqueNationality = Array(Set(nationalities))
uniqueNationalityid = Array(Set(nationalitiesid))
这让我得到了一个新的数组,里面有我需要的独特物品......
问题是当我想要相同的订单时订单是不同的......例如:
国籍ID = [3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4]
国籍 = [“印度人”、“印度人”、“印度人”、“印度人”、“印度人”、“印度人”、“印度人”、“印度人”、“菲律宾人”、“菲律宾人”、“菲律宾人”、“菲律宾人” ]
唯一的数组是:
uniqueNationality = [“印度人”,“菲律宾人”]
uniqueNationalityid = [4, 3]
这是错误的,因为印度身份证是 3,菲律宾身份证是 4!
它应该是:
uniqueNationalityid = [3, 4]
如何解决这个问题?
解决方案
let uniqueList = nationalities.reduce([], {
$0.contains($1) ? $0 : $0 + [$1]
})
推荐阅读
- flutter - 使用不包含 UserBloc 类型的块的上下文调用错误 BlocProvider.of()
- angular - 我必须在 Angular 生产构建之前修复所有 TS 错误吗?
- list - Prolog - 如何计算列表的元素?
- java - 杰克逊序列化:包含正则表达式的字符串字段反转义以获取实际文字
- linux - 以编程方式获取容器内的 linux 进程内存使用情况
- python-3.x - evernote.edam.userstore.UserStore.Client:HTTP 状态 400
- eclipse - 如何使用 xtext 制作用于检查源代码的 DSL
- angular - 如何在 Typescript 中获取 Angular 组件选择器值
- python - scipy curve_fit 为 gompertz 模型引发“OptimizeWarning:无法估计参数的协方差”
- typescript - 如何根据用户登录显示组件路由器链接?