Skip to content

Instantly share code, notes, and snippets.

@KentarouKanno
Last active April 6, 2017 14:33
Show Gist options
  • Save KentarouKanno/b891c7e7b87dc9adb1ec to your computer and use it in GitHub Desktop.
Save KentarouKanno/b891c7e7b87dc9adb1ec to your computer and use it in GitHub Desktop.
Array filter

Array filter

★ クロージャに指定した条件を満たす要素からなる新しい配列を返す関数

let numList = [1 ,2 ,3 ,4 ,5]

// 偶数のみを抽出して返す
let evenList = numList.filter {(val:Int) -> Bool in
    return val % 2 == 0
}

//=> evenList = [2,4]

// ※ 上記を省略したコード
let evenList = numList.filter{$0 % 2 == 0}

// ---------------------------------------------

// 抽出条件:偶数で3未満
let evenList = numList.filter{$0 % 2 == 0}.filter{$0 < 3}
//=> 2

★ Dictonary型をfilter処理する

let dic = ["a" : 1, "b": 2]
let filterDic = dic.filter() {
    $0.1 % 2 == 0
}

filterDic
//=> [(.0 "b", .1 2)] タプルとして返却される

★ 2つのstructのプロパティを比較して2つ目のプロパティが1つ目のプロパティに含まれていないものを抽出する

import Foundation

struct A {
    var value: String
    
    init(_ value: String) {
        self.value = value
    }
}

struct Z {
    var value: String
    
    init(_ value: String) {
        self.value = value
    }
}

var a = [A("1"), A("2"), A("3"), A("4"), A("5")]
var z = [Z("2"), Z("4")]

let result = a.filter { !z.map{ $0.value }.contains($0.value) }
//=> [A(value: "1"), A(value: "3"), A(value: "5")]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment