سؤال

وأواجه مشكلة التفاف رأسي حول مفهوم صفيف مع أكثر من بعدين، لماذا كنت في حاجة واحدة، وكيف أن استخدامها.

وعلى سبيل المثال، كيف يمكنك أن تذهب نحو تمثل البيانات التالية في مجموعة multidimesional؟

والجنس: ذكر | الإناث
لون الشعر: أشقر | امرأة سمراء | أسود لل لون العيون: أزرق | براون | الأخضر | عسلي

وغريزة أخبرني أنني يجب أن إنشاء صفيف وذلك:

و string[,,] personAttributes = new string[2,3,4]

يرجى اظهار كيف كنت أنت تملأ هذه المجموعة دون حلقة، ثم مع حلقة. أي توسع في مفاهيم واستخدام تقدير.

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

المحلول

وأنا لا أريد أن أتطرق personAttributes سبيل المثال لأنني لا أعتقد أن مجموعة 2D هو فكرة جيدة، ناهيك 3D (أنا شخصيا سوف تستخدم مجموعة من البنيات).

ولكن، المصفوفات متعددة الأبعاد مفيدة جدا عندما يكون لديك نوع من البيانات الفضائية متعامد (أي لديك العديد من "الخيارات" التي هي مستقلة عن بعضها البعض).

وعلى سبيل المثال، إذا كنت تخزين أوقات الاستجابة من 20 شخصا أكثر من 10 الاختبارات، حيث كل اختبار ويتكرر 3 مرات، ويتم كل شيء مرة واحدة في الشهر لمدة 12 شهرا، قد يكون لديك مجموعة من هذا القبيل:

double[,,,] responseTime = new double [12,20,10,3];

نصائح أخرى

وفي خطر السبر مبتذلة، يمكنك استخدام المصفوفات من ثلاثة أو أكثر من أبعاد عندما يكون لديك ثلاثة أو أكثر من أبعاد البيانات. لذا أعتقد أنك تواجه مشكلة في تصور ثلاثة أبعاد من البيانات.

وماذا عن 3-D تيك تاك تو ؟ أي تمثيل منفصلة من البيانات ثلاثية الأبعاد يناسب في هذه الفئة.

وأما بالنسبة للسمات مثل لون الشعر وهلم جرا، وأود أن لا تستخدم مجموعة متعددة الأبعاد لهذا الغرض. استخدام الكائنات مع خصائص ذلك وتتضمن التعدادات (على سبيل المثال بين الجنسين باعتبارها التعداد) حسب مقتضى الحال. وهذا سوف يكون على كثير المزيد قراءة من مجموعة N-الأبعاد.

وانا اقول في المثال الخاص بك مجموعة متعددة الأبعاد لا معنى له. وهناك فئة يجعل أكثر بكثير الشعور في وضعك. سيكون شيئا مثل تعداد المخزنة على متغير عضو يكون طريقة واحدة يمكن أن تذهب:

enum HAIRCOLORS { BROWN = 0, BLOND = 1 ..... };
enum SEX { FEMALE = 0, MALE = 1 };
enum EYECOLORS { GREEN, BLUE, RED .... };

class PersonAttributes 
{
    public SEX sex = SEX.Female;
    public HAIRCOLORS hairColor = HAIRCOLORS.Brown;
    public EYECOLORS eyeColor = EYECOLORS.Green;
};

وغيرها ...

لنموذج هياكل البيانات التي لها أبعاد متعددة. لوحة الشطرنج هو مثال جيد، 1 البعد عن رتبة، والآخر هو لملف.

ومنذ فئات البيانات في المثال الخاص بك (النوع الاجتماعي، لون العينين، لون الشعر) ليس لها أي علاقة مع الفئات الأخرى، يبدو أن هذا سيكون أفضل ممثلة 3 صفائف مختلفة، ولكل منها 1 البعد.

إذا كنت لا تريد أن حلقة على مجموعة متعددة الأبعاد، يمكنك ببساطة استخدام حلقة ضمن حلقة:

for (int i = 0; i < array.length; i++) {
   for (int j = 0; j < array[0].length; j++) {
      string data = array[i][j];
      // do something with the data
   }
}

والتفكير في مجموعة كعنوان قد تكون مفيدة.

123 شارع سبرينغفيلد MA

وباستخدام هذا المثال، فإن أول مجموعة لي أن يكون مجموعة من الدول. فإن كل دولة عقد مجموعة من المدن، من مدن تحمل الشوارع وأخيرا الشوارع يحمل عناوين الفردية.

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

وتبحث في المثال الخاص بك، وأنا لا أرى المصفوفات متعددة الأبعاد كما مناسبا. إلا أن الشيء الرئيسي الذي تريد القيام به مع صفائف الخاص بك هو العثور مجموعات فرعية من البيانات الخاصة بك، مثل الناس التي هي إناث / الاشقر / العيون الزرقاء. وأود أن اتباع اقتراح استخدام فئة. عندما كنت تبحث في وجوه شخص في مجموعة وأنت تسير في حاجة إلى معرفة القيم مؤشر لافتا إلى أن الشخص لمعرفة تلك الخصائص.

وثمة مثال آخر قد يكون من المفيد هو تدويل الرسائل في تطبيق. المصفوفات يمكن أن تكون اللغة والدولة (خطأ، تحذير، ومعلومات)، معرف الرسالة (وسلاسل رسالة مجموعة).

وأما بالنسبة لملء صفائف، مجرد أمثلة قليلة عن الحلقات يمكن أن تستخدم إذا تم فرز البيانات. خلاف ذلك تحليل البيانات المدخلة لتحديد المؤشرات المناسبة.

وكما كتب الآخرين، والمثال الخاص بك لا مناسبة تماما لمجموعة 3D. المثال الخاص بك يبدو أكثر ملاءمة لبنية بيانات 2D. مؤشر واحد هو الأشخاص، ومؤشر آخر هو السمة: الجنس، ولون الشعر، ولون العين. أو هل يمكن استخدام بعض هيكل بيانات أخرى ...

وهناك مثال بسيط من مجموعة 3D: النظر في تخزين و(غير مضغوط) أبيض وأسود الفيلم الرقمي. كل إطار صورة X 2D مقابل Y مع قيم الكثافة: صورة (ط، ي). الآن لديك إطارات متعددة أن يكون الفيلم الذي يمكن تخزين الفيلم كصور (ط، ي، ك)، حيث التغيرات ك على مر الزمن. إذا كان الفيلم في اللون، ويمكن إضافة البعد الرابع لتخزين ثلاثة ألوان أساسية: cimages (ط، ي، ف، ك)، ف = 1،2،3، ولها مجموعة 4D

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