for文いろいろ

範囲演算子
forとString
forとArray
forとDictionary

範囲演算子

いわゆるfor(int i=0;i<n;i++)みたいなやつなのだが。

for index in 1...5 {
	println("\(index) times 5 is \(index * 5)")
}

let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..count {
	println("Person \(i + 1) is called \(names[i])")
}

ちなみに上が「Closed Range Operator」、下が「Half-Closed Range Operator」と呼ばれていて別物である。多分閉区間とかそのあたりのcloseなんだろうと思う。
1つ目は「index = 1, 2, 3, 4, 5」で5が含まれる。つまり「1...5」でピリオドが3つだと1以上5以下。
2つ目は「i = 0, 1, 2, 3」で4(names.countの値)が含まれない。つまり「0..count」でピリオドが2つだと0以上count未満というもの。

別に指定した回数実行してくれればOK、iの数字とか使わないよって場合は「_」を書く。例はいわゆる3^10の計算。

let base = 3
let power = 10
var answer = 1
for _ in 1...power {
	answer *= base
}
//3 to the power of 10 is 59049
println("\(base) to the power of \(power) is \(answer)")

Cとかっぽいfor文はこんな感じ。

for var index = 0; index < 3; ++index {
	println("index is \(index)")
}

上の方法だとfor文の外でindexが使えないので、indexを他で使いたい場合はfor文の外で宣言。

var index: Int
for index = 0; index < 3; ++index {
	println("index is \(index)")
}
//The loop statements were executed 3 times
println("The loop statements were executed \(index) times")

forとString

for-inにStringをかけるとこんなかんじ。

for character in "Dog!" {
	println(character)
}
/*
実行結果…………
D
o
g
!
*/

for character in "Hello" {
	println(character)
}

utfなんとかと付けるとunicodeのコードが取れるようだ。(マニュアルにはDog!の後ろに絵文字のわんこが1匹いてバイトの違いによる出力の違いが分かるようになっているので試してみてちょ)

let dogString = "Dog!"

//UInt8型のすうじが返ってくる
// 68 111 103 33
for codeUnit in dogString.utf8 {
	print("\(codeUnit) ")
}
print("\n")

//UInt16型
// 同上
for codeUnit in dogString.utf16 {
	print("\(codeUnit) ")
}
print("\n")

//unicodeScalarsだといわゆる「U+○○○○○」の○○○○○の部分が取れる。UInt32型。
for codeUnit in dogString.unicodeScalars {
	print("\(codeUnit) ")
}
print("\n")

forとArray

いわゆるforeachみたいな動き。

var shoppingList = ["Six eggs", "Milk", "Flour", "Baking Powder", "Bananas"]
for item in shoppingList {
	println(item)
}
/*
結果…
Six eggs
Milk
Flour
Baking Powder
Bananas
*/

let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
	println("Hello, \(name)!")
}

配列の○番目の要素、みたいな感じで番号が必要な時はenumerateを使うとキーと値をセットでくれる。ので、そいつをfor (key, value) inに入れる。

for (index, value) in enumerate(shoppingList) {
	println("Item \(index + 1): \(value)")
}
/*
結果…
Item 1: Six eggs
Item 2: Milk
Item 3: Flour
Item 4: Baking Powder
Item 5: Bananas
*/

forとDictionary

forとキーと値。両方使う時は(値, キー)みたいな感じで。片方しか使わないなら「.keys」とか「.values」を使う。

let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
	println("\(animalName)s have \(legCount) legs")
}
/*
spiders have 8 legs
ants have 6 legs
cats have 4 legs
*/

var airports = ["TYO": "Tokyo", "LHR": "London Heathrow"]

for (airportCode, airportName) in airports {
	println("\(airportCode): \(airportName)")
}
/*
TYO: Tokyo
LHR: London Heathrow
*/

for airportCode in airports.keys {
	println("Airport code: \(airportCode)")
}
/*
Airport code: TYO
Airport code: LHR
*/

for airportName in airports.values {
	println("Airport name: \(airportName)")
}
/*
Airport name: Tokyo
Airport name: London Heathrow
*/

↑ PAGE TOP