可能重複:
Picking a Random Object in an NSArray挑選的NSArray中的隨機元素的Objective-C
我有目標C與字符串的數組:
NSArray *tips;
tips = [NSArray arrayWithObjects:
@"Foo",
@"Bar",
@"Baz",
nil];
我想要一個方法從數組中獲取一個隨機項並返回它。有沒有一種方法,或者我怎樣才能自己寫一個方法?謝謝。
可能重複:
Picking a Random Object in an NSArray挑選的NSArray中的隨機元素的Objective-C
我有目標C與字符串的數組:
NSArray *tips;
tips = [NSArray arrayWithObjects:
@"Foo",
@"Bar",
@"Baz",
nil];
我想要一個方法從數組中獲取一個隨機項並返回它。有沒有一種方法,或者我怎樣才能自己寫一個方法?謝謝。
使用此代碼:
uint32_t rnd = arc4random_uniform([tips count]);
NSString *randomObject = [tips objectAtIndex:rnd];
編輯: 雖然在我的項目上工作,我決定創建的NSArray一個類別。這很簡單,但我發現它很有用。
以下是文件:
的NSArray + Random.h
#import <Foundation/Foundation.h>
@interface NSArray (Random)
- (id)randomObject;
@end
的NSArray + Random.m
#import "NSArray+Random.h"
@implementation NSArray (Random)
-(id)randomObject {
NSUInteger myCount = [self count];
if (myCount)
return [self objectAtIndex:arc4random_uniform(myCount)];
else
return nil;
}
@end
然後在當前的例子中,你使用它像這個:
NSString *randomObject = [tips randomObject];
使用類別還有另一個優點:當您決定更改在應用程序中選擇隨機對象的方式時,您只需修改randomObject方法。
NSUInteger i = arc4random();
NSString *string = [tips objectAtIndex: i];
-(NSString *) returnArrayItem: (NSArray *) array {
//Sets randNum equal to a random number between 0 and the number of elements in the array parameter
NSUInteger randNum = arc4random() % [array count];
//Sets the string returnValue to a random string in the array
NSString *returnValue = [array objectAtIndex:randNum];
//Returns array
return returnValue;
}
希望這有助於
+1,因爲我剛剛得知arc4random_uniform。謝謝。時間來取代我所有的arc4randoms –
這個解決方案效果很好,謝謝。 – beakr
@MatthiasBauch很高興我能幫到你。您可能想要使用我剛發佈的類別。那麼你的下一次改變將會不那麼痛苦:) – Adam