Swift - 查找列表中的重复元素

时间:2016-02-15 16:48:01

标签: ios swift

我有以下UITextField列表:

let list = [(name1TextField, phone1TextField), (name2TextField, phone2TextField), (name3TextField, phone3TextField), (name4TextField, phone4TextField), (name5TextField, phone5TextField)]

我正在尝试找到手机重复并打印出来

修改

e.g。 (元组可能是空的)

list = [("john", "555-444-333"), ("james", "555-444-333"), ("",""), ("bob", "333-222-111"), ("nancy", "222-111-444"), ]

output 555-444-333

我该怎么办?

4 个答案:

答案 0 :(得分:3)

鉴于此

var name1TextField: UITextField!
var phone1TextField: UITextField!
var name2TextField: UITextField!
var phone2TextField: UITextField!
var name3TextField: UITextField!
var phone3TextField: UITextField!
var name4TextField: UITextField!
var phone4TextField: UITextField!
var name5TextField: UITextField!
var phone5TextField: UITextField!

这个

let list = [(name1TextField, phone1TextField), (name2TextField, phone2TextField), (name3TextField, phone3TextField), (name4TextField, phone4TextField), (name5TextField, phone5TextField)]

解决方案

let repeatedPhones = list
    .flatMap { $0.1?.text }
    .reduce([String:Int]()) { (var dict, phone) -> [String:Int] in
        dict[phone] = (dict[phone] ?? 0) + 1
        return dict
    }
    .filter { $0.1 > 1 && !$0.0.isEmpty }
    .map { $0.0 }

答案 1 :(得分:1)

使用dictionary记录您看到电话号码的时间:

var dict = [String: Int]()

然后通过整个列表:

for (_, phone) in list {

    if let count = dict[phone] {
        dict[phone] = count + 1
    } else {
        dict[phone] = 1
    }
}

在此之后,您将获得一个字典,其中包含list

中显示的电话号码和每个电话号码的计数
for item in dict {
    if item.1 > 1 {
        print(item.0)
    }
}

此方法具有时间复杂度:O(2n)

此问题看起来像是Find Duplicate Elements In Array Using Swift

的副本

答案 2 :(得分:0)

您可以创建最后一个元组项的列表,然后在将它们添加到新数组时检查它们是否已包含在数组中。 如下所示:

func processList(list) -> String {
     var bufferArray[String] = []
     for (int i = 0; i < list.size; i++) {
          if !(bufferArray.contains( list[i].1 )) {
               bufferArray.add(list[i].1)
          else {
             return list[i].1
          }
      }
}

答案 3 :(得分:0)

我将做的是以下内容:

var duplicates = []
var set = Set<String>()

for tuple in list {
    if set.contains(tuple.phoneTextField.text) {
        duplicates.append(tuple.phoneTextField.text)
    } else {
        set.insert(tuple.phoneTextField.text)
    }
}

最后,您可以使用duplicates数组执行任何操作。