هل يمكنني تحويل الكائنات في NSMutableArray دون خلق مؤقت المصفوفة ؟

StackOverflow https://stackoverflow.com/questions/1438101

سؤال

ظننت بأن الأمر كان مع ،

void shiftArray(NSMutableArray *mutableArray, NSUInteger shift)
{
    for (NSUInteger i = 0; i < [mutableArray count]; i++) {
        NSUInteger newIndex = (i + shift) % [mutableArray count];
        [mutableArray exchangeObjectAtIndex:i withObjectAtIndex:newIndex];
    }
}

الذي يتحول 0,1,2,3,4 في 0,2,3,4,1 عندما تحول من جانب واحد.

والنتيجة المتوقعة هي 4,0,1,2,3

أشعر أن أنا في عداد المفقودين شيء واضح...

تحديث: شكرا ماتيو ، وهذا هو ما وظيفة يبدو الآن.

void shiftArrayRight(NSMutableArray *mutableArray, NSUInteger shift) {
    for (NSUInteger i = shift; i > 0; i--) {
        NSObject *obj = [mutableArray lastObject];
        [mutableArray insertObject:obj atIndex:0];
        [mutableArray removeLastObject];
    }
}

لم أكن أعلم أنك يمكن أن تجعل عام NSObject ووضع بعض فرعية في ذلك.الأمر كله مجرد مؤشرات لذلك أعتقد أنه على ما يرام, أليس كذلك ؟

من الصعب كسر هذه العادة من التفكير في هذه الأشياء أكياس من الاشياء بدلا من مؤشرات إلى الحقيبة.

هل كانت مفيدة؟

المحلول

محاولة شيء من هذا القبيل

for (NSUInteger i = shift; i > 0; i--) {
   NSObject* obj = [mutableArray lastObject];
   [mutableArray insertObject:obj atIndex:0];
   [mutableArray removeLastObject];
}

التحذير -- أنا لم تختبر هذا الرمز ، ولكن ينبغي أن تساعدك على حل المشكلة.

نصائح أخرى

كنت بحاجة الى ان ننظر مرة أخرى في الخوارزمية.في كل مرة خلال الحلقة ، تبادل عنصر واحد مع (في حالة التحول=1) واحد القادم.

0,1,2,3,4
1,0,2,3,4
1,2,0,3,4
1,2,3,0,4
1,2,3,4,0
0,2,3,4,1

يمكنك القيام بالعملية كنت تريد أن تفعل, ولكن تحتاج إلى التفكير حول كيفية ترتيب الخطوات و تبعيات للحصول على النتيجة الصحيحة.في تافهة الحالة ، يمكنك العمل فقط المتخلفة من النهاية.

0,1,2,3,4
4,1,2,3,0
4,1,2,0,3
4,1,0,2,3
4,0,1,2,3

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top