ما هي الآثار المترتبة على إجراء نسخة الضحلة على مجموعة من أجل تغيير ذلك ؟

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

  •  10-07-2019
  •  | 
  •  

سؤال

إذا كان فهمي العميقة والضحلة النسخ الصحيحة سؤالي هو مستحيل واحد.إذا كان لديك مجموعة ([10]) وإجراء نسخة الضحلة (b[20]) هذا لن يكون من المستحيل البيانات في ب لن تكون متجاورة?

إذا كنت قد حصلت على هذا خاطئ تماما أن شخص المشورة طريقة سريعة immitate (في c#) c++'s القدرة على القيام realloc من أجل تغيير صفيف.

ملاحظة
Im تبحث في .استنساخ ()،.نسخة() أعضاء من النظام.مجموعة وجوه.

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

المحلول

لا يمكنك تغيير حجم القائمة مجموعة ، ومع ذلك ، يمكنك استخدام:

Array.Resize(ref arr, newSize);

هذا تخصص جديد مجموعة نسخ البيانات من مجموعة إلى مجموعة جديدة و تحديثات arr متغير (والتي يتم تمريرها من قبل-المرجع في هذه الحالة).هل هذا ما تعنيه ؟

ومع ذلك ، فإن أي أخرى المراجع لا يزال لافتا في مجموعة لن يتم تحديث.الخيار الأفضل قد يكون العمل مع List<T> - ثم أنت لا تحتاج إلى تغيير ذلك يدويا و ليس لديك قضية خارج التاريخ المراجع.أنت فقط Add/Remove الخ.عموما أنت لا تميل إلى استخدام المصفوفات مباشرة في كثير من الأحيان.لديهم استخداماتها ، ولكنها ليست الحالة الافتراضية.


إعادة تعليقاتك ،

  • الملاكمة: List<T> لا مربع.هذا هو واحد من النقاط حول الأدوية;تحت غطاء محرك السيارة ، List<T> هو التفاف حول T[], لذا List<int> وقد int[] - لا الملاكمة.كبار السن ArrayList هو التفاف حول object[], بحيث لا مربع ؛ بالطبع, الملاكمة ليس سيئا كما قد تفترض على أي حال.
  • طريقة عمل Array.Resize; أنا أذكر أنه يرى حجم T, ثم يستخدم Buffer.BlockCopy إلى blit محتويات التفاصيل الحقيقية مخفية داخلية في الدعوة ولكن أساسا بعد تخصيص مجموعة جديدة وهو blit (memcpy) البيانات بين اثنين صفائف ، لذلك يجب أن تكون سريع جدا;علما بأن المرجعية-أنواع هذا فقط نسخ الإشارة ، وليس الكائن على كومة.ومع ذلك ، إذا كنت تغيير حجم بانتظام ، List<T> عادة ما يكون أبسط كثيرا (و أسرع إلا إذا كنت في الأساس إعادة تنفيذ ما List<T> لا إعادة القدرة الاحتياطية لتقليل عدد تغيير حجم).
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top