Skip to content

Instantly share code, notes, and snippets.

@KentarouKanno
Last active August 7, 2016 02:45
Show Gist options
  • Save KentarouKanno/0a29f4b49a2795e0006fc1ba5158c62f to your computer and use it in GitHub Desktop.
Save KentarouKanno/0a29f4b49a2795e0006fc1ba5158c62f to your computer and use it in GitHub Desktop.
Search Filter

Search Filter

★ 対象の条件で抽出

// ------- 文字列配列から抽出 --------

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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment