如何过滤重复的元素,直到新元素出现
Posted
技术标签:
【中文标题】如何过滤重复的元素,直到新元素出现【英文标题】:How to filter duplicated elements until a new one comes 【发布时间】:2022-01-14 04:00:15 【问题描述】:我想过滤掉重复的元素,直到新元素使用 Swift。我想对整个数组执行此操作。
示例:[1,1,1,2,2,1]
输出:[1,2,1]
【问题讨论】:
请向我们展示您最近尝试的代码以及您遇到的问题 实际上,我有一个领域数据库,我从中获取了数组,在这个数组中,我有重复的元素,我想过滤这些元素以在序列中具有唯一的元素。如果我在这里分享我的代码会更加混乱,我想在我的输出中包含我上面描述的内容。 【参考方案1】:您可以使用reduce(into:_:)
这样做:
let array = [1,1,1,2,2,1]
let filtered = array.reduce(into: [Int]()) partialResult, current in
guard let last = partialResult.last else partialResult.append(current); return
if last != current
partialResult.append(current)
print(filtered)
我们遍历数组。
partialResult
是当前正在填充的新数组。
我们检查是否已经有一个初始值,否则我们添加它。
然后,我们将partialResult
的最后一个值与初始数组的当前迭代值进行比较,以决定是否将其附加到partialResult
一旦你理解了逻辑,它也可以写成:
let filtered2 = array.reduce(into: [Int]()) partialResult, current in
if partialResult.last != current
partialResult.append(current)
print(filtered2)
【讨论】:
非常感谢您提供有用的答案,您能否也帮我解决这个问题,我正在使用领域数据库,当我想附加到部分结果时,我收到此错误“没有完全匹配在调用实例方法 'append'"let data = RealmManager().fetchLocations(by: uuid) let filtered2 = data.reduce(into: [ActivityModel]()) partialResult, current in if partialResult.last?.motionType != current.motionType partialResult.append(current)
这很奇怪。我试图重现,但不能有错误。你确定data
是[ActivityModel]
吗?如果是 [[ActivityModel]],则存在该错误,但if
行也存在另一个错误。以上是关于如何过滤重复的元素,直到新元素出现的主要内容,如果未能解决你的问题,请参考以下文章