SwiftのExtensionを使って配列の中身をシャッフルする

スポンサーリンク

現在の会社に入社以来、大部分はAPIの設計、実装、お守りなどサーバーサイド的なことしかしていないので、クライアント寄りな仕事もしてみたくなってるkimikatoです。
お久しぶりです。
先月末ぐらいからSwift 2.0でのプログラミングを始めました。

さて、配列に入ったデータをランダムにシャッフルしたかったのでググってみたわけですが、参考リンク先のコードでは下記のようなエラーが発生して使えなかったので修正してみました。

Result of call to non-mutating function ‘sort’ is unused; use ‘sortInPlace’ to mutate in-place

環境

OS X
OS X El Capitan ( 10.11.1 )
Xcode
Version 7.1 (7B91b)
Swift
2.0

コード

//
//  ArrayExtension.swift
//  ArrayShuffleTest
//
//  Created by Kiminori Kato on 2015/11/03.
//  Copyright © 2015年 Kiminori Kato. All rights reserved.
//

import Foundation


extension Array {
    mutating func shuffle(count: Int) {
        for _ in 0..

実行例

Arrayy型の場合

var arrayList: [String] = []
arrayList = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]

// シャッフル前の配列
print(arrayList.joinWithSeparator(","))  // => 1,2,3,4,5,6,7,8,9,10

// 1回目のシャッフル
arrayList.shuffle(arrayList.count)
print(arrayList.joinWithSeparator(","))  // => 6,1,8,5,3,9,2,4,7,10

// 2回目のシャッフル
arrayList.shuffle(arrayList.count)
print(arrayList.joinWithSeparator(","))  // => 9,8,1,10,5,6,2,3,4,7

NSMutableArray型の場合

var result: String = ""
var arrayList: NSMutableArray = []
arrayList = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]

// シャッフル前の配列
result = (arrayList as NSArray as! [String]).joinWithSeparator(",")
print(result)  // => 1,2,3,4,5,6,7,8,9,10

// 1回目のシャッフル
arrayList.shuffle(arrayList.count)
result = (arrayList as NSArray as! [String]).joinWithSeparator(",")
print(result)  // => 10,4,1,2,5,7,3,6,8,9

// 2回目のシャッフル
arrayList.shuffle(arrayList.count)
result = (arrayList as NSArray as! [String]).joinWithSeparator(",")
print(result)  // => 5,1,8,6,9,4,10,2,3,7

最後に

kiiitaさん、ありがとうございます。

参考リンク

コメント

タイトルとURLをコピーしました