Swift 練習

Mac をもっていないので Linux Mint でやっている。使っているバージョンは Swift version 3.1-dev。

文法。
1.1. Swift について | Swift | スタジオガラゴ

まずは

$ cd ~/Documents/Swift
$ export PATH=$HOME/Documents/Swift/usr/bin:$PATH

REPL。

$ swift

インタプリタ

$ swift helloswift.swift

コンパイル→実行

$ swiftc helloswift.swift
$ ./helloswift

 

クイックソート

import Glibc

func qsort(_ ar: [Int]) -> [Int] {
    if ar.isEmpty {return []}
    var xs = ar
    xs.remove(at: 0)
    let pivot = ar[0]
    let left  = xs.filter({$0 < pivot})
    let right = xs.filter({$0 > pivot})
    return qsort(left) + Array(arrayLiteral: pivot) + qsort(right)
}

print(qsort([5, 1, 3, 9, 8, 7]))    //=>[1, 3, 5, 7, 8, 9]

//filter は Ruby の select のようなもの 
//[pivot] とは書けない => Array(arrayLiteral: pivot) と書く

//Ruby の ar[2..5] みたいなのはどう書くのか → ar[2...5] でした
//Ruby の ar[2..-1] は ar[2..<ar.count] と書くしかないのかな?

※参考
配列 | Swift言語を学ぶ
【Swift】配列のメソッドまとめ
Swiftのmap, filter, reduce(などなど)はこんな時に使う!
 

map, filter, reduce

[1, 2, 3].map({$0 * 3})        //=>[3, 6, 9]
[1, 2, 3].map {$0 + 10}        //=>[11, 12, 13]  括弧の省略

[1, 2, 3].filter({$0 <= 2})    //=>[1, 2]

[1, 2, 3].reduce(0) {(a: Int, b: Int) -> Int in a + b}    //=>6
[1, 2, 3].reduce(0) {(a, b) -> Int in a + b}    //=>6
[1, 2, 3].reduce(0) {$0 + $1}  //=>6
[1, 2, 3].reduce(0, +)         //=>6

 

append

[1, 2, 3] + [10]    //=>[1, 2, 3, 10]

var a = [1, 2, 3]
a.append(10)        //=>[1, 2, 3, 10]
a.append(contentsOf: [7, 8])    //=>[1, 2, 3, 7, 8]

var a = [Any]()
a = [1, 2, 3]
a.append("a")       //=>[1, 2, 3, "a"]
a.count             //=>4  配列の大きさ

forEach

Ruby の each

> [1, 2, 3].forEach {print("\($0)")}
1
2
3

では Ruby の each_with_index は?

> let a = ["a", "b", "c"]
> for (i, x) in a.enumerated() {print("\(i): \(x)")} 
0: a
1: b
2: c

そもそも Ruby の times は?

> let a = ["a", "b", "c"]
> for i in 0..<a.count {print("\(i): \(a[i])")}
0: a
1: b
2: c