gpt4 book ai didi

swift - 在 swift 的堆栈实现中包含方法

转载 作者:行者123 更新时间:2023-11-28 07:52:02 26 4
gpt4 key购买 nike

这是我在网上找到的堆栈实现

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com