سؤال

وأنا في فئة البرمجة الأساسية، ويتم كل شيء في رمز زائف.

وسؤالي هو: كيف ربط بين المصفوفات؟

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

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

وشكرا للمساهمة!

وSidenote: حصلت عليه أحسب! انتهى بي الأمر القيام كيف جريج Hewgill قد ذكرت. كما وضعت في تعليقي على اقتراحه، والتي رمي عشوائي في الأسطر من التعليمات البرمجية حتى بلغت هذه الفكرة لي ... أنها لا تبدو جميلة (وحدة واحدة تبادلت أسماء، وآخر لمبادلة الدرجات، وثالثة حتى ذلك الحين لمبادلة طلاب الصفوف الفردية في وقت سابق يوم في مجموعة متعددة الأبعاد)، ولكن يبدو فعلا للعمل ... أي وسيلة لاختبار في اللغة كما قلت لا مترجم ولا لدي ما يكفي من المعرفة لجعل رمز زائف إلى رمز الفعلي إذا كان كان لي أن تحميل واحد، ولكن كان يبدو جيدا حقا على ورقة I كتبته بها على!

وكما ذكرت أيضا في المذكرة، وأنا لا أشكر الجميع على رؤيتهم سريعة ومفيدة، أنا في الواقع لا حتى أعتقد أن الحصول على هذه الليلة الرد، وشكرا لكم جميعا مرة أخرى لجميع مساعدتكم!

وجيفري

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

المحلول

وماذا قد ترغب في القيام به هو ما يلي: كما كنت فرز الأسماء ولديك لمبادلة موقفين، تفعل <م> نفس مبادلة في مجموعة من النقاط. بهذه الطريقة، كافة التغييرات التي تجريها على مجموعة أسماء سوف تنعكس في مجموعة العشرات. عند الانتهاء من ذلك، سوف يكون عشرات بالترتيب مرتبة نفس الأسماء.

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

نصائح أخرى

وتحديد فئة الطالب بسيطة مثل هذا:

public class Student : IComparable<Student>
{
    public string Name { get; set; }
    public int[] Scores { get; set; }

    #region IComparable<Student> Members

    public int CompareTo(Student other)
    {
        // Assume Name cannot be null
        return this.Name.CompareTo(other.Name);
    }

    #endregion
}

وبعد ذلك حتى أبسط

    var students = new[] {
        new Student(){ Name = "B", Scores = new [] { 1,2,3 } },
        new Student(){ Name = "C", Scores = new [] { 3,4,5 } },
        new Student(){ Name = "A", Scores = new [] { 5,6,7 } }
    };

    Array.Sort(students);

وسوف قيام بهذا العمل بالنسبة لك.

وفرضية الخاص بك هو الخطأ. يجب أن لا يكون لديك اثنين من مجموعة في المقام الأول.

يجب أن يكون لديك مجموعة واحدة من التحف ، كل منها يحمل اسم الطالب وعشرات له:

public class Record
{
    public string Student;
    public int[] Scores;
} 

ونهجين: أولا، عندما يكون الترتيب أسماء، كل مرة تقوم فيها تبادل اسمين، تبادل الصفوف (أو الأعمدة أو ما تريد أن تسميها) درجات في نفس المواقف. في النهاية، يجب أن يكون لا يزال عشرات متزامنا مع الأسماء.

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

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