如果不存在,则追加对象 swift
Posted
技术标签:
【中文标题】如果不存在,则追加对象 swift【英文标题】:append object if not exist swift 【发布时间】:2021-02-12 06:42:12 【问题描述】:我是 Swift 语言的新手,我正在尝试为我的问题找到解决方案。 我创建了一个名为 Book 的类
我正在尝试创建 Book。一本书有名称(创建后不可更改)、purchaseid(创建后不可更改)和市场价格(可更改)
还有一个类Shelf。书架有名称(创建后无法更改)和书籍数组(可以通过调用 add 和 delete 方法更改,并且在 book purchaseId 上是唯一的 - 即没有重复的 purchaseId)。 Shelf 还有一种计算书架中书籍平均价格的方法。
我正在尝试找到一个解决方案,了解如何在添加数组之前检查数组并获取书籍购买 ID 并从数组中删除一本书。
这是我的代码:
class Book
let name: String
let purchaseID: Int
let marketPrice: Double
init(name: String, purchaseID: Int, marketPrice: Double)
self.name = name
self.purchaseID = purchaseID
self.marketPrice = marketPrice
func bookPrinter() -> String
return "Name: \(self.name) Price: \(marketPrice)"
class Shelf
private let shelfName: String
private var arrayOfBooks = [Book]()
init(shelfName: String)
self.shelfName = shelfName
func add(book : Book )
func delete(book : Book)
func printer()
for b in self.arrayOfBooks
print(b.bookPrinter())
【问题讨论】:
您的意思是purchaseId
唯一标识一本书?
如果书架上书籍的顺序无关紧要,您应该使用Set
是的,我的意思是 purchaseId 唯一标识一本书
【参考方案1】:
对于add(book:)
函数,如果该书的purchaseID
是唯一的,可以使用contains(where:)
函数知道数组中是否已经存在Book
:
func add(book: Book)
if !arrayOfBooks.contains(where: $0.purchaseID == book.purchaseID )
arrayOfBooks.append(book)
或者给Book
添加一个符合Equatable
协议的扩展:
extension Book: Equatable
static func == (lhs: Book, rhs: Book) -> Bool
return lhs.purchaseID == rhs.purchaseID
并简化您的 add(book:)
函数:
func add(book: Book)
if !arrayOfBooks.contains(book)
arrayOfBooks.append(book)
delete(book:)
函数可以使用数组的removeAll(where:)
函数:
func delete(book: Book)
arrayOfBooks.removeAll(where: $0.purchaseID == book.purchaseID )
但是,正如@LeoDabus 在 cmets 中所说,如果订购书不重要,您可能应该使用Set
。在某些方面会更快。
一个实现可能是这样的:
extension Book: Hashable
static func == (lhs: Book, rhs: Book) -> Bool
return lhs.purchaseID == rhs.purchaseID
func hash(into hasher: inout Hasher)
hasher.combine(purchaseID)
class Shelf
private let shelfName: String
private var setOfBooks = Set<Book>()
init(shelfName: String)
self.shelfName = shelfName
func add(book: Book)
setOfBooks.insert(book)
func delete(book: Book)
setOfBooks.remove(book)
【讨论】:
我更新了我的问题。感谢您的快速回复。以上是关于如果不存在,则追加对象 swift的主要内容,如果未能解决你的问题,请参考以下文章
如果不存在,则创建一个 .txt 文件,如果它确实追加一个新行