You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift栈实现中添加contains方法的需求及现有实现代码

给你的泛型Stack添加contains方法

嘿,这个需求很好实现!不过因为你的Stack是泛型结构体,要判断元素是否存在,得让元素类型T支持相等比较——也就是遵循Equatable协议。这里有两种常见的实现方式,你可以根据自己的场景选择:

方式一:让整个Stack的元素类型遵循Equatable

这种方式下,所有使用该Stack的场景,元素都必须是Equatable类型,好处是方法调用起来更直接:

public struct Stack<T: Equatable> {
    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 }
    
    // 新增的contains方法
    public func contains(_ element: T) -> Bool {
        return array.contains(element)
    }
}

方式二:仅给contains方法添加Equatable约束

如果你不想限制整个Stack的元素必须是Equatable(比如偶尔需要存储不支持相等比较的类型),可以只给contains方法单独加上约束:

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 }
    
    // 仅当T遵循Equatable时,这个方法才会生效
    public func contains(_ element: T) -> Bool where T: Equatable {
        return array.contains(element)
    }
}

小提醒

两种方案都是直接复用了Swift数组自带的contains方法,因为你的Stack底层是基于数组实现的,这样既高效又不用自己重复造轮子~

内容的提问来源于stack exchange,提问作者Simon.T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:07:46