נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: מיון רשימה לפי שדה במחלקה C#

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
ה*לה
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 28 June 2009 בשעה 16:15 | IP רשוּם
ציטוט ה*לה

יש לי רשימה מסוג סטודנט, ואני רוצה למיין אותה לפי הממוצע שלהם (ממוצע הוא אחד השדות במחלקה סטודנט).

איך עושים את זה?

 

חזרה לתחילת העמוד הצג את כרטיס החבר של ה*לה חפש הודעות אחרות של ה*לה בקר בדף הבית של ה*לה
 
גד
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 28 June 2009 בשעה 22:56 | IP רשוּם
ציטוט גד

יש לך 2 אפשרויות, הראשונה היא לשנות את הסדר של החוליות כשאת מתעסקת באותה הרשימה, השניה היא לכתוב פעולה שיוצרת רשימה חדשה ממוינת ולהחזיר אותה.

אני מעדיף את האפשרות השניה, והנה דוגמה שלי:
קוד:
public static List<Student> SortByGrade(List<Student> lst)
{
    List<Student> lst2 = new List<Student>();
    Node<Student> pos = lst2.GetFirst();
    int maxGrade = pos.GetInfo().GetGrade();

    while (pos != null)
    {
        Node<Student> pos2 = lst.GetFirst();
        Node<Student> pos3 = null;
        while (pos2 != null)
            if (pos2.GetInfo().GetGrade() > maxGrade)
            {
                pos3 = pos2;
                maxGrade = pos2.GetInfo().GetGrade();
            }
        pos = lst2.Insert(pos, pos3.GetInfo());
        pos3.GetInfo().SetInfo(-1);
        maxGrade = -1;
    }

    return lst2;
}


בהנחה שקיימת פעולה GetGrade
חזרה לתחילת העמוד הצג את כרטיס החבר של גד חפש הודעות אחרות של גד בקר בדף הבית של גד
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 29 June 2009 בשעה 13:40 | IP רשוּם
ציטוט shoshan

והשלישית היא הרבה יותר יפה...

לא סתם משתמשים ב-Generics, המימוש של Sort כבר בוצע באופן גנרי, את רק צריכה
לממש פעולה על "גדול מ" (או לחלופין במקרה הזה ליצור מתודה של "גדול מ" שמקבלת שני
סטודנטים ומחזירה מספר גדול מ-0 אם הראשון גדול מהשני, 0 אם הם שווים, וקטן מ-0 אם
הראשון קטן מהשני)

קוד:
using System;
using System.Collections.Generic;

namespace StudentsSort
{
    class Student : IComparable<Student>
    {
        public string Name { get; set; }
        public List<int> Grades { get; set; }

        public Student(string name)
        {
            Name = name;
            Grades = new List<int>();
        }

        public override string ToString()
        {
            return string.Format("{0} (Averege: {1:0.00})", Name, Averege);
        }

        public float Averege
        {
            get
            {
                if (Grades.Count == 0)
                    return 0;
                int sum = 0;
                foreach (int grade in Grades)
                    sum += grade;
                return (float)sum / Grades.Count;
            }
        }

        public int CompareTo(Student other)
        {
            float diff = this.Averege - other.Averege;
            if (diff > 0)
            {
                return 1;
            }
            else if (diff < 0)
            {
                return -1;
            }
            return 0;
        }
    }



    class Program
    {
        static void Main(string[] args)
        {
            List<Student> list = new List<Student>();
            for (int i = 0; i < 4; i++)
            {
                list.Add(new Student(string.Format("Student {0}", i + 1)));
                list[i].Grades.Add(i * 25);
                list[i].Grades.Add(i * 25 + 10);
                list[i].Grades.Add(i * 25 + 13);
                list[i].Grades.Add(i * 25 + 24);
            }
            list.Sort();
            foreach (Student s in list)
            {
                Console.WriteLine(s);
            }
        }
    }
}



__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
גד
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 29 June 2009 בשעה 16:19 | IP רשוּם
ציטוט גד

אתה משתמש ב-List אחר, שים לב שהפעולות והשימוש של המחלקה List בספרי הלימוד במסגרת 5 יח"ל הן שונות לחלוטין... לא ניתן לקרוא ל- lst[i]‎ לדוגמה
חזרה לתחילת העמוד הצג את כרטיס החבר של גד חפש הודעות אחרות של גד בקר בדף הבית של גד
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 29 June 2009 בשעה 17:57 | IP רשוּם
ציטוט shoshan

זה LinkedList או List ?

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה