乱数の生成や配列のシャッフルを行う「DCRandomize」クラス

Objective-Cで乱数の生成や配列のシャッフルを行う「DCRandomize」クラスを作成しました。

下記よりソースコードのダウンロードが行えます。

ダウンロード

主な機能は下記の4つです。

主な機能

  1. 配列をシャッフルして取得
  2. 指定した範囲内の数値をシャッフルして配列取得
  3. 指定した数値と異なる乱数を取得
  4. 指定した範囲内の乱数を取得

使用方法

配列をシャッフルして取得

1
2
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:@[@1, @2, @3, @4, @5, @6, @7, @8, @9, @10]];
[DCRandomize shuffleArray:array];

1〜10の数値をシャッフルして配列取得

1
[DCRandomize shuffle:1 max:10];

5〜10の範囲で 9以外の乱数を取得

1
[DCRandomize exact:5 max:10 exceptId:9];

5〜10の範囲の乱数を取得

1
[DCRandomize range:5 max:10];

ソースコード

DCRandomize.h

1
2
3
4
5
6
7
8
9
10
11
#import <Foundation/Foundation.h>

@interface DCRandomize : NSObject

#pragma mark - public method
+ (NSMutableArray *)shuffleArray:(NSMutableArray *)array;
+ (NSMutableArray *)shuffle:(NSInteger)min max:(NSInteger)max;
+ (NSInteger)exact:(NSInteger)min max:(NSInteger)max exceptId:(NSInteger)exceptId;
+ (NSInteger)range:(NSInteger)min max:(NSInteger)max;

@end

DCRandomize.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#import "DCRandomize.h"

@implementation DCRandomize

#pragma mark - Shuffle Array

// 配列をシャッフルして取得
+ (NSMutableArray *)shuffleArray:(NSMutableArray *)array
{
    NSMutableArray *resultList = array;
    int i = [resultList count];
    while (--i) {
        int j = rand() % (i + 1);
        [resultList exchangeObjectAtIndex:i withObjectAtIndex:j];
    }
    return [NSMutableArray arrayWithArray:resultList];
}

#pragma mark - Shuffle

// 指定した範囲内の数値をシャッフルして配列取得
+ (NSMutableArray *)shuffle:(NSInteger)min max:(NSInteger)max
{
    NSMutableArray *tmpList = [NSMutableArray array];
    int num = (max - min) + 1;
    for (int i = 0; i < num; i++) {
        [tmpList insertObject:[NSNumber numberWithInt:i + min] atIndex:i];
    }
    return [DCRandomize shuffleArray:tmpList];
}

#pragma mark - Exact

// 指定した数値と異なる乱数を取得
+ (NSInteger)exact:(NSInteger)min max:(NSInteger)max exceptId:(NSInteger)exceptId
{
    NSInteger tmpId;
    do {
        tmpId = [DCRandomize range:min max:max];
    } while (tmpId == exceptId);
    return tmpId;
}

#pragma mark - Range

// 指定した範囲内の乱数を取得
+ (NSInteger)range:(NSInteger)min max:(NSInteger)max
{
    return min + arc4random_uniform((max - min) + 1);
}

@end

サンプルソースコード

1
2
3
4
5
6
7
8
9
10
11
//配列をシャッフルしてログ出力
NSLog(@"DCRandomize.shuffleArray: %@", [DCRandomize shuffleArray:_array]);

//指定した範囲内の数値をシャッフルしてログ出力
NSLog(@"DCRandomize.shuffle: %@", [DCRandomize shuffle:MIN_ID max:MAX_ID]);

//指定したIDと異なる乱数をログ出力 (exceptId以外の数値を出力)
NSLog(@"DCRandomize.exact: %d", [DCRandomize exact:MIN_ID max:MAX_ID exceptId:EXCEPT_ID]);

//指定した範囲内の乱数をログ出力
NSLog(@"DCRandomize.range: %d", [DCRandomize range:MIN_ID max:MAX_ID]);

お薦めの参考書

本気ではじめるiPhoneアプリ作り Xcode 7.x+Swift 2.x対応
iOSアプリ開発をこれから始める方に最もお薦めな一冊です。解り辛い点は図解入りで解説されており、プログラミングの動作の仕組みから詳しく知ることができます。基本から通信処理まで押さえられており、アプリ公開の手順についても解説されています。

   このエントリーをはてなブックマークに追加

About

Masaki Hirokawa (@dolice_apps)

デザインエンジニア 廣川政樹の開発ブログ。Objective-Cや Javaなど iPhone/Androidアプリ開発に関する技術情報を掲載しています。

iPhone apps

  • リラックス・ヒーリング(無料)
  • 望みが叶う!引き寄せの法則アプリ(無料)
  • ミステリー - 怖い話や不思議な体験、都市伝説まとめ
  • 浮世絵壁紙 - 美しい日本画ギャラリー(無料)
  • 綺麗な壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)
  • クールな壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)

Android apps

  • 浮世絵壁紙 - 美しい日本画ギャラリー
  • 綺麗な高画質壁紙

Objective-C Classes

Tag Cloud

ActionScript(9) ActionScript3(7) Ad(4) Adfurikun(2) AdMob(9) Android(10) Animation(17) AppDelegate(3) ARC(1) ArrayList(1) AVAudioPlayer(4) AVAudioSession(1) AVFoundation(3) Banner(2) Bitmap(1) Camera(4) CGAffineTransform(4) CGBlendMode(2) CGContextRef(1) CGImageRef(1) Classes(44) CLLocationManager(1) ConnectivityManager(1) ContentResolver(1) CoreLocation(2) Delegate(3) Device(7) Display(1) DisplayMetrics(1) Download(101) Facebook(6) Foundation(72) Framework(2) Google Analytics(1) Handler(1) iAd(6) ImageView(1) In-AppPurchase(1) iOS(12) iOS 7(15) iOS 7.1(3) iOS 8(1) iPad(7) iPhone(21) iPhone 6(4) Java(7) JavaScript(2) LINE(4) Localize(1) Magazine(1) MediaStore(1) MFComposeViewController(1) Nend(1) NetworkInfo(1) NSArray(23) NSCalendar(3) NSData(2) NSDate(7) NSDateComponents(2) NSDateFormatter(2) NSDictionary(12) NSEnumerator(1) NSIndexSet(1) NSInteger(6) NSMutableArray(17) NSMutableDictionary(5) NSMutableOrderedSet(7) NSMutableString(4) NSMutableURLRequest(1) NSNotificationCenter(1) NSNumber(1) NSObject(1) NSOrderedSet(7) NSRange(2) NSSelectorFromString(1) NSSet(6) NSString(19) NSTimer(4) NSTimeZone(1) NSURL(7) NSURLConnection(1) NSURLRequest(2) NSUserDefaults(7) NSXMLParser(2) Objective-C(222) PHP(1) Products(14) QuartzCore(3) RSS(2) Runnable(1) Sample(51) Screensaver(9) SDK(2) ShareCompat(1) Social(10) StoreKit(1) Twitter(6) UIAccelerometer(3) UIActionSheet(1) UIActivityIndicator(1) UIActivityIndicatorView(3) UIActivityViewController(1) UIAlertView(5) UIApplication(7) UIButton(4) UIColor(3) UIDatePicker(5) UIDevice(6) UIDeviceOrientation(1) UIEvent(6) UIImage(15) UIImagePickerController(4) UIImageView(12) UIKit(58) UILabel(7) UINavigationBar(4) UINavigationItem(1) UIPasteboard(4) UIScreen(1) UIScrollBar(1) UIScrollView(1) UISlider(3) UIStoryboardSegue(3) UISwitch(1) UITabBar(3) UITableView(4) UITextField(2) UIView(11) UIViewAnimationTransition(1) UIViewController(4) UIWebView(5) WindowManager(1) Xcode(48) Xcode 5(8) Xcode 5.1(2)