查找数组中两个字符串是否相同?

时间:2017-06-05 08:54:58

标签: swift

我有一个对象数组。每个对象都有一个名为title的属性,我想知道两个对象是否具有相同的标题。如何在swift中做到这一点?

5 个答案:

答案 0 :(得分:2)

如果你想要与数组中另一个对象具有相同标题的对象列表,你可以这样做(假设title是一个字符串):

var titles     = Set<String>()
let duplicates = array.filter{ !titles.insert($0.title).inserted }

// note: this only lists the second and subsequent element with a given title

如果你需要他们的索引,你可以这样做:

var titles     = Set<String>()
let dupIndexes = array.enumerated()
                      .filter{ !titles.insert($1.title).inserted }
                      .map{$0.0}

如果您想要复制标题的所有对象(包括第一个),您可以像这样优化第一种方法:

var titles     = Set<String>()
let dupTitles  = Set(array.map{$0.title}.filter{!titles.insert($0).inserted})
let dupObjects = array.filter{dupTitles.contains($0.title)}

[编辑] Swift 4有一个新的Dictionary初始化程序,可用于此:

let dupObjects = Dictionary(grouping:array){$0.title}
                .filter{$0.value.count > 1}
                .flatMap{$0.value}

在所有情况下,如果.count的重复项,dupIndexes或dupObjects是&gt; 0如果你在数组中至少有一个重复

答案 1 :(得分:0)

我不知道如何专门为swift做这个,但一般来说你可以用数组中的任何字符串检查数组的每个字符串(就像排序算法一样)并且如果你发现字符串是相等的到另一个,你的数组中有一个双字符串

答案 2 :(得分:0)

let s = Set(arr.map{$0.title})
print("found duplicate title?", arr.count != s.count)

如果您的标题不符合Hashable协议,只需使用

即可
let s1 = Set(arr1.map{"\($0.title)"})
print("found duplicate title?", arr1.count != s1.count)

答案 3 :(得分:0)

var duplicateArray: [String] = []
var storedArray: [String] = []
    for text in array {

        if storedArray.contains(text) {
             dump(text + " is a duplicate")
             dupliateArray.append(text)
        }
        storedArray.append(text)
    }

答案 4 :(得分:0)

我会将它添加到标题中的一组字符串中 然后比较两者的计数,如果count相等则没有重复,如果set count less则表示有两个标题相等