★ 対象の条件で抽出
// ------- 文字列配列から抽出 --------
var value1 = ["a", "b", "c", "d" ,"e"]
var result1 = value1.filter { (val) -> Bool in
return val == "a"
}
result1
//=> ["a"]
// -------- 構造体配列から抽出 ------------
struct A {
var name: String!
init(_ name: String) {
self.name = name
}
}
var value2 = [A("a"), A("b"), A("c"), A("d") ,A("e")]
var result2 = value2.filter { (val: A) -> Bool in
return val.name == "b"
}
result2
//=> [{name "b"}]
// ------- クラス配列から抽出(複数条件) -------
class B {
var name: String!
var id : Int!
init(_ name: String, _ id: Int) {
self.name = name
self.id = id
}
}
var value3 = [B("a", 1), B("c",3), B("c", 5), B("d", 5), B("c", 1)]
var result3 = value3.filter { (val: B) -> Bool in
return val.name == "c" && val.id == 5
}
result3
//=> [{name "c", id 5}]
★ 対象が含まれているかどうかを判定(Bool値)
// ----- 文字列配列 ------
var value1 = ["a", "b", "c", "d" ,"e"]
var result1 = value1.contains("a")
result1
//=> true
// ------- 構造体配列 --------
struct A {
var name: String!
init(_ name: String) {
self.name = name
}
}
var value2 = [A("a"), A("b"), A("c"), A("d") ,A("e")]
var result2 = value2.contains{ (val) -> Bool in
val.name == A("e").name
}
result2
//=> false
// ----- クラス配列(複数条件) ------
class B {
var name: String!
var id : Int!
init(_ name: String, _ id: Int) {
self.name = name
self.id = id
}
}
var value3 = [B("a", 1), B("c",3), B("c", 5), B("d", 5), B("c", 1)]
var compVal = B("d", 4)
var result3 = value3.contains { (val) -> Bool in
val.name == compVal.name && val.id == compVal.id
}
result3
//=> false
★ 対象が含まれているオブジェクトを取得(部分一致)
// 文字列配列
var value1 = ["abc", "bcd", "cef", "efg" ,"fgh"]
var result1 = value1.filter { (value) -> Bool in
value.lowercaseString.containsString("bc")
}
result1
//=> ["abc", "bcd"]
// ------ 構造体配列 --------
struct A {
var name: String!
init(_ name: String) {
self.name = name
}
}
var value2 = [A("123"), A("1234"), A("3456"), A("234") ,A("456")]
var result2 = value2.filter { (value) -> Bool in
value.name.lowercaseString.containsString("23")
}
result2
//=> [{name "123"}, {name "1234"}, {name "234"}]
// ----- クラス配列(複数条件) ------
class B {
var name: String!
var id : Int!
init(_ name: String, _ id: Int) {
self.name = name
self.id = id
}
}
var value3 = [B("ab", 123), B("bc",12), B("abc", 23), B("acc", 45), B("abf", 456)]
var result3 = value3.filter { (value) -> Bool in
value.name.lowercaseString.containsString("ab") && String(value.id).lowercaseString.containsString("3")
}
result3
//=> [{name "ab", id 123}, {name "abc", id 23}]
★ 文字列配列から各条件で適合した配列を取得する
let resultArray = stringArray.filter { (value) -> Bool in
// 前方一致の場合
value.hasPrefix("Search word")
// 後方一致の場合
value.hasSuffix("Search word")
// 部分一致の場合1
value.lowercaseString.containsString("Search word")
// 部分一致の場合2
value.rangeOfString("Search word") != nil
}