- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
for (NSString *str in ar)
{
if ([startChord isEqualToString:str])
{
if (offset > 0)
{
if (i+offset > 11) // 11 - последний индекс в массиве
finalChord = [ar objectAtIndex:(i+offset) - 12];// (12 = 11+1) это чтобы понятно было, например, 11 элемент сместить на 2 выше, это будет 11+2 - 12 равно 1 индекс в массиве (т.е. второй элемент)
else
finalChord = [ar objectAtIndex:(i+offset)];
}
else if (offset < 0)
{
if (i-abs(offset) < 0) // 0 - первый индекс в массиве
finalChord =[ar objectAtIndex:12 - abs(i-abs(offset))];
else
finalChord = [ar objectAtIndex:(i-abs(offset))];
}
else
{
finalChord = [ar objectAtIndex:i];
}
break;
}
i++;
}
guest 07.10.2011 14:12 # 0
krypt 07.10.2011 14:16 # 0
делает то же самое
guest 29.10.2011 14:58 # 0
[ar indexOfObject:startChord];
и
[startChord isEqualToString:str]
Это разные вещи. Конечно если не рассматривается ситуация, по которой startChord - это ссылка на элемент массива
krypt 29.10.2011 15:24 # 0
NSArray *ar = [[NSArray alloc] initWithObjects:@"A", @"A#", @"B", @"C", @"C#", @"D", @"D#", @"E", @"F", @"F#", @"G", @"G#", nil];
Так что результат для isEqual и isEqualToString будет одинаков, пожалуй только 2й побыстрее наботать будет. Но не на столько, чтобы экономить на 12ти сравнениях...
Собственно я даже не знаю, корректен ли этот код с точки зрения логики изначально - я на гитаре играть не пробовал даже.
Собственно, это код транспанирования.
krypt 07.10.2011 14:18 # +2