قم بتمرير الإشارة إلى العنصر في C# Array

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

  •  09-06-2019
  •  | 
  •  

سؤال

أقوم ببناء مجموعة من السلاسل باستخدام

string[] parts = string.spilt(" ");

والحصول على مصفوفة تحتوي على أجزاء X، أود الحصول على نسخة من مصفوفة السلاسل التي تبدأ من العنصر

parts[x-2]

بخلاف نهج القوة الغاشمة الواضح (إنشاء مصفوفة جديدة وإدراج سلاسل)، هل هناك طريقة أكثر أناقة للقيام بذلك في C#؟

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

المحلول

ماذا عن Array.Copy؟

http://msdn.microsoft.com/en-us/library/aa310864(VS.71).aspx

طريقة Array.Copy (Array، Int32، Array، Int32، Int32)

نسخ نطاق من العناصر من مصفوفة بدءًا من فهرس المصدر المحدد ولصقها في مصفوفة أخرى بدءًا من فهرس الوجهة المحدد.يتم تحديد الطول والفهارس كأعداد صحيحة 32 بت.

نصائح أخرى

تذكرت إجابتي على هذا السؤال وتعرفت للتو على كائن جديد قد يوفر طريقة عالية الأداء لفعل ما تريد.

نلقي نظرة على ArraySegment<T>.وسوف تسمح لك أن تفعل شيئا من هذا القبيل.

string[] parts = myString.spilt(" ");
int idx = parts.Length - 2;
var stringView = new ArraySegment<string>(parts, idx, parts.Length - idx);
List<string> parts = new List<string>(s.Split(" "));
parts.RemoveRange(0, x - 2);

افترض أن List<string>(string[]) تم تحسينه لاستخدام المصفوفة الموجودة كمخزن دعم بدلاً من إجراء عملية نسخ، وقد يكون ذلك أسرع من إجراء نسخة مصفوفة.

يستخدم صفيف.نسخ.يحتوي على حمل زائد يفعل ما تحتاجه:

Array.Copy (Array, Int32, Array, Int32, Int32)
نسخ نطاق من العناصر من صفيف بدءا من المصدر المحدد فهرستها ولصقها في صفيف آخر بدءا من الوجهة المحددة فهرس.

صفيف.طريقة النسخ

أعتقد شيئا مثل:

string[] less = new string[parts.Length - (x - 2)];
Array.Copy(parts, x - 2, less, 0, less.Length);

(بلا الإيقاف بمقدار خطأ واحد أنا متأكد من وجوده هناك.)

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