Swift过滤器对象数组

sal*_*aam 22 swift

class book{
    var nameOfBook: String!
}

var englishBooks=[book(),book(),book()]
var arr = englishBooks.filter {
    contains($0.nameOfBook, "rt")
}
Run Code Online (Sandbox Code Playgroud)

我正在使用此过滤器,但有错误无法使用参数调用过滤器

Mar*_*n R 40

contains()检查序列是否包含给定元素,例如,如果a String包含给定元素Character.

如果您打算查找名称中包含子字符串 "rt"的所有书籍,那么您可以使用rangeOfString():

var arr = englishBooks.filter {
    $0.nameOfBook.rangeOfString("rt") != nil
}
Run Code Online (Sandbox Code Playgroud)

或者用于不区分大小写的比较:

var arr = englishBooks.filter {
    $0.nameOfBook.rangeOfString("rt", options: .CaseInsensitiveSearch) != nil
}
Run Code Online (Sandbox Code Playgroud)

Swift 2开始,你可以使用

nameOfBook.containsString("rt") // or
nameOfBook.localizedCaseInsensitiveContainsString("rt")
Run Code Online (Sandbox Code Playgroud)

Swift 3中这是

nameOfBook.contains("rt") // or
nameOfBook.localizedStandardContains("rt") // or
nameOfBook.range(of: "rt", options: .caseInsensitive) != nil
Run Code Online (Sandbox Code Playgroud)


Ohm*_*hmy 13

对不起,这是一个旧线程.稍微更改代码以正确初始化变量'nameOfBook'.

class book{
   var nameOfBook: String!
   init(name: String) {
      nameOfBook = name
   }
}
Run Code Online (Sandbox Code Playgroud)

然后我们可以创建一系列书籍.

var englishBooks = [book(name: "Big Nose"), book(name: "English Future 
Prime Minister"), book(name: "Phenomenon")]
Run Code Online (Sandbox Code Playgroud)

数组的'filter'函数接受一个参数和一些逻辑,'contains'函数可以采用您正在搜索的最简单形式的字符串.

let list1 = englishBooks.filter { (name) -> Bool in
   name.contains("English")
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样打印出list1:

let list2 = arr1.map({ (book) -> String in
   return book.nameOfBook
})
print(list2)

// print ["English Future Prime Minister"]
Run Code Online (Sandbox Code Playgroud)

以上两个片段可以写成短手,如下所示:

let list3 = englishBooks.filter{ ($0.nameOfBook.contains("English")) }
print(list3.map({"\($0.nameOfBook!)"}))
Run Code Online (Sandbox Code Playgroud)


And*_*rew 6

2020 | 环球银行金融电信协会 5.1:

public filterStr = ""

public var books: [Book] = []

public var booksFiltered: [Book] {
   get {
      filterStr.isEmpty
         ? books
         : books.filter { $0.alias.range(of: filterStr, options: .caseInsensitive) != nil }
   }
}

Run Code Online (Sandbox Code Playgroud)


Nii*_*uda 5

如果您想从对象数组(匹配)中删除具有特定 ID (matchIDsToDelete) 的对象区间

var matches = [Match]
var matchIDsToDelete = [String]
matches = matches.filter { !matchIDsToDelete.contains($0.matchID) }
Run Code Online (Sandbox Code Playgroud)


Muh*_*yab 5

SWIFT 4.0

为了过滤对象并获得结果数组,您可以使用此

self.resultArray = self.upcomingAuctions.filter {
                    $0.auctionStatus == "waiting"
                }
Run Code Online (Sandbox Code Playgroud)