ما هي الآثار المترتبة على إجراء نسخة الضحلة على مجموعة من أجل تغيير ذلك ؟
-
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
;أنا أذكر أنه يرى حجمالتفاصيل الحقيقية مخفية داخلية في الدعوة ولكن أساسا بعد تخصيص مجموعة جديدة وهو blit (memcpy) البيانات بين اثنين صفائف ، لذلك يجب أن تكون سريع جدا;علما بأن المرجعية-أنواع هذا فقط نسخ الإشارة ، وليس الكائن على كومة.ومع ذلك ، إذا كنت تغيير حجم بانتظام ،T
, ثم يستخدمBuffer.BlockCopy
إلى blit محتوياتList<T>
عادة ما يكون أبسط كثيرا (و أسرع إلا إذا كنت في الأساس إعادة تنفيذ ماList<T>
لا إعادة القدرة الاحتياطية لتقليل عدد تغيير حجم).