我有以下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
我该怎么办?
答案 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)
的副本答案 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
数组执行任何操作。