スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[iOS]指定した数字の範囲から、指定した個数の数値を取得する(重複なし)

例えば、10~20の間の数字の中から5つをランダムに抜き取って配列が欲しい場合の処理です。

//Range範囲内の数値からmax個をランダムに取り出して、配列にして返す。
- (NSArray *)randomList:(int)max Range:(NSRange)range {
//指定した取得個数が、指定範囲を超えている場合は空を返す。
//(重複がないため、こうしないとループするケースがあります)
if(max < range.location+range.length)return nil;
//利用する変数の準備
NSMutableArray *array = [NSMutableArray array];
// 現在の日時を用いて乱数を初期化する
srand([[NSDate date] timeIntervalSinceReferenceDate]);

for (int i=0; i<max; i++) {
int int_value = (rand() % range.length)+range.location;
NSNumber *number_value = [NSNumber numberWithInt:int_value];
if([array indexOfObject:number_value] == NSNotFound) {
[array addObject:number_value];
NSLog(@"randamList[%d] : %d",i,int_value);
}
else {
i--;
}
}

return array;
}

上記で使うRangeをFromTo指定で取得する処理は下記になります。
//FromToに指定した数値範囲をNSRangeにして返す
//(ex) (From:5 , To:10) => NSRange(location:5 , length:5)
- (NSRange) getNumberRangeFrom:(NSInteger)from To:(NSInteger)to {
NSRange range = NSMakeRange(from, to-from);
return range;
}



参考URL1:アルゴリズム:重複しないランダムな数値を配列で取得
参考URL2:NSRangeの使い方
参考URL3;ランダムな数値を取得する - rand() arc4random()
このエントリーをはてなブックマークに追加

tag : ios 数値 numbers 範囲 range 取得 get

コメントの投稿

非公開コメント

Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。