猿问

在SWIFT中从数组中删除重复元素

在SWIFT中从数组中删除重复元素

我可能有一个数组,如下所示:


[1, 4, 2, 2, 6, 24, 15, 2, 60, 15, 6]


或者,真的,任何类似类型的数据序列。我要做的是确保每个相同的元素中只有一个。例如,上面的数组将变成:


[1, 4, 2, 6, 24, 15, 60]


注意,删除了2、6和15的副本,以确保每个相同的元素中只有一个。SWIFT提供了一种很容易做到的方法,还是我必须自己去做?


慕码人8056858
浏览 1384回答 3
3回答

qq_遁去的一_1

你可以自己滚,比如这样(用SET更新SWIFT1.2):func&nbsp;uniq<S&nbsp;:&nbsp;SequenceType,&nbsp;T&nbsp;:&nbsp;Hashable&nbsp;where&nbsp;S.Generator.Element&nbsp;==&nbsp;T>(source:&nbsp;S)&nbsp;->&nbsp;[T]&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;buffer&nbsp;=&nbsp;[T]() &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;added&nbsp;=&nbsp;Set<T>() &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;elem&nbsp;in&nbsp;source&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;!added.contains(elem)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer.append(elem) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;added.insert(elem) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;buffer}let&nbsp;vals&nbsp;=&nbsp;[1,&nbsp;4,&nbsp;2,&nbsp;2,&nbsp;6,&nbsp;24,&nbsp;15,&nbsp;2,&nbsp;60,&nbsp;15,&nbsp;6]let&nbsp;uniqueVals&nbsp;=&nbsp;uniq(vals)&nbsp;//&nbsp;[1,&nbsp;4,&nbsp;2,&nbsp;6,&nbsp;24,&nbsp;15,&nbsp;60]SWIFT 3版本:func&nbsp;uniq<S&nbsp;:&nbsp;Sequence,&nbsp;T&nbsp;:&nbsp;Hashable>(source:&nbsp;S)&nbsp;->&nbsp;[T]&nbsp;where&nbsp;S.Iterator.Element&nbsp;==&nbsp;T&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;buffer&nbsp;=&nbsp;[T]() &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;added&nbsp;=&nbsp;Set<T>() &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;elem&nbsp;in&nbsp;source&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;!added.contains(elem)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer.append(elem) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;added.insert(elem) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;buffer}

RISEBY

您可以很容易地将其转换为SET,然后再转换回数组:let&nbsp;unique&nbsp;=&nbsp;Array(Set(originals))这不能保证保持数组的原始顺序。

梵蒂冈之花

这里有很多答案,但我忽略了这个简单的扩展,适用于SWIFT 2和更高版本:extension&nbsp;Array&nbsp;where&nbsp;Element:Equatable&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;func&nbsp;removeDuplicates()&nbsp;->&nbsp;[Element]&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;[Element]() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;value&nbsp;in&nbsp;self&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;result.contains(value)&nbsp;==&nbsp;false&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.append(value) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result&nbsp;&nbsp;&nbsp;&nbsp;}}让它变得超级简单。可以这样称呼:let&nbsp;arrayOfInts&nbsp;=&nbsp;[2,&nbsp;2,&nbsp;4,&nbsp;4]print(arrayOfInts.removeDuplicates())&nbsp;//&nbsp;Prints:&nbsp;[2,&nbsp;4]基于属性的滤波要根据属性筛选数组,可以使用以下方法:extension&nbsp;Array&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;func&nbsp;filterDuplicates(@noescape&nbsp;includeElement:&nbsp;(lhs:Element,&nbsp;rhs:Element)&nbsp;->&nbsp;Bool)&nbsp;->&nbsp;[Element]{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;results&nbsp;=&nbsp;[Element]() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;forEach&nbsp;{&nbsp;(element)&nbsp;in &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;existingElements&nbsp;=&nbsp;results.filter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;includeElement(lhs:&nbsp;element,&nbsp;rhs:&nbsp;$0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;existingElements.count&nbsp;==&nbsp;0&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;results.append(element) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;results&nbsp;&nbsp;&nbsp;&nbsp;}}如下所示:let&nbsp;filteredElements&nbsp;=&nbsp;myElements.filterDuplicates&nbsp;{&nbsp;$0.PropertyOne&nbsp;==&nbsp;$1.PropertyOne&nbsp;&&&nbsp;$0.PropertyTwo&nbsp;==&nbsp;$1.PropertyTwo&nbsp;}
随时随地看视频慕课网APP
我要回答