2013-03-04 3 views
8

У меня есть NSArray. У меня есть некоторое значение внутри этого массива.Как изменить индекс стоимости в NSArray

NSArray *testArray = [NSArray arrayWithObjects:@"Test 1", @"Test 2", @"Test 3", @"Test 4", @"Test 5", nil]; 
NSLog(@"%@", testArray); 

Результат, как ниже:

(
"Test 1", 
"Test 2", 
"Test 3", 
"Test 4", 
"Test 5" 
) 

Теперь я хочу, чтобы результат:

(
"Test 3", 
"Test 5", 
"Test 1", 
"Test 2", 
"Test 4" 
) 

Есть ли способ сделать это без повторной инициализации массива? Можно ли изменить значение этого массива?

+2

No. NSArray статичен, как это, так что вы даже не будете в состоянии добавить что-нибудь к нему, оставив в одиночестве перетасовку записей. Хотя «NSMutableArray» имеет функцию 'sortUsingSelector'. С помощью этого метода вы можете определить свой собственный порядок сортировки. – ATaylor

+0

@ATaylor: возможно ли это в NSMutableArray ?? –

+0

@ B.M.W. да это возможно в NSMutableArray .. –

ответ

6

Ваш массив должен быть экземпляром NSMutableArray иначе писать методы не допускаются (NSArray только для чтения)

Используйте следующий метод:

- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject 

вам потребуется временное хранения для хранения Заменяет объект:

id tempObj = [testArray objectAtIndex:index]; 
[testArray replaceObjectAtIndex:index withObject:[testArray objectAtIndex:otherIndex]]; 
[testArray replaceObjectAtIndex:otherIndex withObject:tempObj]; 
+0

Спасибо giorashc .... Это работа как шарм. Спасибо за помощь. –

+19

Вы можете использовать 'exchangeObjectAtIndex: withObjectAtIndex:', тогда вам не нужен временный объект. –

+0

@MartinR: попробуем ... Спасибо за помощь ... –

7

Использование NSMutableArray поменять два объекты.

- exchangeObjectAtIndex:withObjectAtIndex: 

Этот обмен объекты в массиве при заданных индексов (idx1 и idx2)

idx1
Индекс объекта, с помощью которого, чтобы заменить объект с индексом idx2.

idx2
Индекс объекта, с которым следует заменять объект по индексу idx1.

СВИФТ

func exchangeObjectAtIndex(_ idx1: Int, 
     withObjectAtIndex idx2: Int) 

Objective-C Используйте NSMutableArray

- (void)exchangeObjectAtIndex:(NSUInteger)idx1 
       withObjectAtIndex:(NSUInteger)idx2 

Swapping elements in an NSMutableArray