配列の要素を小さいものから順に並べていくサンプルコード
import Foundation
//配列を入れると、一番小さいindexを返す
func findSmallest(array: [Int]) -> Int{
var smallest = array[0]
var smallestIndex = 0
//iは0~ 配列の数
let totalArray = array.count - 1
for i in smallestIndex ... totalArray {
if array[i] < smallest {
smallest = array[i]
smallestIndex = i
}
}
return smallestIndex
}
//新しい配列をつくる
func selectionSort(array:[Int]) -> [Int] {
var inputArray = array
var newArray = [Int]()
var totalArray = inputArray.count - 1
for i in 0 ... totalArray {
//pytonでいう array.pop(smallest)がない? 指定した位置の要素を削除し、値を取得みたいなやつ
//配列の中の一番小さい値のはいっているindexを習得したら、新しい配列に入れて配列から消す
let smallest = findSmallest(array:inputArray)
newArray.append(array[smallest])
inputArray.remove(at:smallest)
}
return newArray
}
var array = [6,4,1]
print(selectionSort(array:array))
実行結果
[1, 4, 6]
Paizaも
https://paiza.io/projects/6jP7hjM4PqqVMQVRPAQMKg?locale=en-us
躓いたところ
func selectionSort(array:[Int]) -> [Int] {
var newArray = [Int]()
var totalArray = array.count - 1
for i in 0 ... totalArray {
//pytonでいう array.pop(smallest)がない? 指定した位置の要素を削除し、値を取得みたいなやつ
//配列の中の一番小さい値のはいっているindexを習得したら、新しい配列に入れて配列から消す
let smallest = findSmallest(array:array)
newArray.append(array[smallest])
array.remove(at:smallest)
}
return newArray
}
エラー内容
入れている配列は変数のはずなのになぜこういうエラーが出るのか不思議だった
main.swift:30:9: error: cannot use mutating member on immutable value: 'array' is a 'let' constant
array.remove(at:smallest)
参考文献のリンクを参照し、もしかして値渡しをしなくてはいけないのかなと思い書き直した。
また、関数引数は定数(let)はこういう問題に直面しないと、知らないなとも思った
↓
Swiftは関数引数は定数(let)。関数引数を直接書き換えることはできない。