在Set中搜索元素的Swift程序
在Swift中,集合是一种无序的、独特的、不可重复的存储对象的容器。当我们需要搜索集合中是否存在某个元素时,可以利用Set的contains()方法进行查找。
Set的contains()方法
Set的contains()方法用于判断集合中是否包含某个元素。其声明如下:
func contains(_ member: Element) -> Bool
其中,member代表集合中存在的元素,Element是泛型参数。该方法返回一个布尔值,true代表集合中包含该元素,false代表集合中不包含该元素。
下面是一段Swift代码示例,演示如何利用contains()方法在Set中查找元素:
var mySet: Set<String> = ["apple", "banana", "orange"]
if mySet.contains("banana") {
print("Set中包含该元素")
} else {
print("Set中不包含该元素")
}
运行结果:
Set中包含该元素
Set中包含自定义对象的搜索
当集合中存储的元素为自定义对象时,需要重写该对象的hashValue和操作符,以确保集合中不会有重复的元素。下面是一个自定义对象Point的例子:
class Point: Hashable {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
// 重写hashValue
func hash(into hasher: inout Hasher) {
hasher.combine(x)
hasher.combine(y)
}
// 重写==
static func ==(lhs: Point, rhs: Point) -> Bool {
return lhs.x == rhs.x && lhs.y == rhs.y
}
}
var pointSet: Set<Point> = [Point(x: 1, y: 2), Point(x: 2, y: 3), Point(x: 4, y: 5)]
if pointSet.contains(Point(x: 2, y: 3)) {
print("Set中包含该元素")
} else {
print("Set中不包含该元素")
}
运行结果:
Set中包含该元素
实战:判断密码是否合法
我们可以利用Set的contains()方法来判断用户输入的密码是否合法。假设密码需要符合以下规则:
- 长度大于等于8位
- 至少包含一个小写字母
- 至少包含一个大写字母
- 至少包含一个数字
下面是一个Swift代码示例:
func isPasswordValid(_ password: String) -> Bool {
if password.count < 8 {
return false
}
if !password.contains(where: { 0.isUppercase }) {
return false
}
if !password.contains(where: {0.isLowercase }) {
return false
}
if !password.contains(where: { $0.isNumber }) {
return false
}
return true
}
let password = "Abc12345"
let invalidPassword = "abc123"
let validChars = Set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")
if isPasswordValid(password) && Set(password).isSubset(of: validChars) {
print("密码合法")
} else {
print("密码不合法")
}
if isPasswordValid(invalidPassword) && Set(invalidPassword).isSubset(of: validChars) {
print("密码合法")
} else {
print("密码不合法")
}
运行结果:
密码合法
密码不合法
结论
本文介绍了Swift中Set的contains()方法,以及如何利用该方法在Set中搜索元素。对于包含自定义对象的Set,需要重写该对象的hashValue和操作符;对于实际应用中的密码合法性验证,可以使用Set的isSubset(of:)方法来判断输入的密码包含的字符是否合法。