这是我在网上找到的堆栈实现
public struct Stack<T> {
fileprivate var array = [T]()
public var isEmpty: Bool {
return array.isEmpty
}
public var count: Int {
return array.count
}
public mutating func push(_ element: T) {
array.append(element)
}
public mutating func pop() -> T? {
return array.popLast()
}
public var top: T? {
return array.last
}
}
我想要一个简单的包含方法来查看元素是否在堆栈中
最佳答案
您必须将元素标记为 Equatable
检查数组中的元素是否可用。这里Stack<T : Equatable>
标记 T
通用元素的类型应为 Equatable
.
检查这段代码:
public struct Stack<T : Equatable>
{
fileprivate var array : [T] = [T]()
public var count : Int { return array.count }
public var isEmpty : Bool {return array.isEmpty }
public mutating func push(_ element : T) {
array.append(element)
}
public mutating func pop() -> T? {
return array.popLast()
}
public func peek() -> T? {
return array.last
}
public func contains(_ element : T) -> Bool {
return self.array.contains { (arrayElement) -> Bool in
return element == arrayElement
}
}
}
代码的使用:
// Create a stack and put some elements on it already.
var stackOfNames = Stack(array: ["Carl", "Lisa", "Stephanie", "Jeff", "Wade"])
// Add an element to the top of the stack.
stackOfNames.push("Mike")
print("Is contains : \(stackOfNames.contains("Carl"))") //true
这里我的元素是 String
的类型, 和 String
已经确认输入 Equatable
.所以它会起作用。
extension String : Equatable {
/// Returns a Boolean value indicating whether two values are equal.
///
/// Equality is the inverse of inequality. For any values `a` and `b`,
/// `a == b` implies that `a != b` is `false`.
///
/// - Parameters:
/// - lhs: A value to compare.
/// - rhs: Another value to compare.
public static func ==(lhs: String, rhs: String) -> Bool
}
如果您使用自定义类型并想使用 Stack,那么您必须实现 Equatable
该类的协议(protocol)。
关于swift - 在 swift 的堆栈实现中包含方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49391879/