やること
- タプルの配列を返すメソッド作成
- 引数で指定した文字列を条件に、Filterしたタプルの配列を返す
メソッド
filterTuple
/**
* 指定した刀派の刀剣男士をタプルの配列で返す
*
* @param Faction 刀派
*
* @return 指定した刀派の刀剣男士
**/
func selectFaction(Faction: String) -> [(rare: Int, name: String, faction: String)] {
let toukenKnights: [(rare: Int, name: String, faction: String)] = [
(5, "三日月宗近", "三条"),
(3, "小狐丸", "三条"),
(3, "石切丸", "三条"),
(3, "岩融", "三条"),
(1, "今剣", "三条"),
(4, "鶯丸", "古備前"),
(3, "明石国行", "来"),
(4, "蛍丸", "来"),
(1, "愛染国俊", "来")
]
var factionKnights:[(rare: Int, name: String, faction: String)] = toukenKnights.filter({$0.faction == Faction})
return factionKnights
}
実装例
filterTuple
override func viewDidLoad() {
super.viewDidLoad()
var sanjo:[(rare: Int, name: String, faction: String)] = selectFaction("三条")
println(sanjo[0].name) // 三日月宗近
println(sanjo[1].name) // 小狐丸
println(sanjo[2].name) // 石切丸
println(sanjo[3].name) // 岩融
println(sanjo[4].name) // 今剣
var kobizen:[(rare: Int, name: String, faction: String)] = selectFaction("古備前")
println(kobizen) // [(4, 鶯丸, 古備前)]
println(kobizen[0].name) // 鶯丸
var rai:[(rare: Int, name: String, faction: String)] = selectFaction("来")
println(rai) // [(3, 明石国行, 来), (4, 蛍丸, 来), (1, 愛染国俊, 来)]
println(rai[0].name) // 明石国行
println(rai[1].name) // 蛍丸
println(rai[2].name) // 愛染国俊
}
刀剣男士は元々刀派でソートされているのであまり良い例ではないですが
ランダムなデータの抽出はFilterが便利です。
for文の中でIf文判定して一致したらappendという一連の操作をしなくていいなんて!
抽出元データの配列や、Filter条件も引数で渡せると思うのですが、
なんでも関数にできるのでいい使用例がとっさに思いつかないですね。
人間側が追いつくようもっと飛翔していきます。