Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: sort dùng Icomparer | Sắp xếp dùng Icomparer trên C#?

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    149

    Mặc định sort dùng Icomparer | Sắp xếp dùng Icomparer trên C#?

    hàm sort này có vấn đề gì mà hok có chạy nhỉ, ai trả lời giùm mình với:

    l.Sort();//khong chay <---------------day ne tai sao nhi------------



    PHP Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    namespace 
    Compare_2_
    {
        class 
    oto:IComparer
        
    {
            private 
    string ten;

            public 
    string Ten
            
    {
                
    get { return ten; }
                
    set ten value; }
            }
            private 
    int km;

            public 
    int Km
            
    {
                
    get { return km; }
                
    set km value; }
            }
            public 
    oto(string tint k)
            {
                
    Ten t;
                
    Km k;

            }
            public 
    void xuat()
            {
                
    Console.WriteLine("Ten :" Ten.PadRight(10' ') + " , km da chay : " Km.ToString());

            }
            public 
    override string ToString()
            {
                return 
    "Ten :" Ten.PadRight(10' ') + " , km da chay : " Km.ToString();
            }
            public 
    int Compare(object aobject b)
            {
                
    oto l = (oto)a;
                
    oto r = (oto)b;
                if (
    string.Compare(l.Tenr.Tentrue) == 1)
                    return 
    1;
                if (
    string.Compare(l.Tenr.Tentrue) == 0)
                    return 
    0;
                return -
    1;
            }
        
        }
        class 
    Program
        
    {
            static 
    void Main(string[] args)
            {
        
                
    ArrayList l = new ArrayList();
                
    l.Add(new oto("jupiter"500));
                
    l.Add(new oto("suzuko"340));
                
    l.Add(new oto("bamomo"50));
                
    l.Add(new oto("xmen"540));

                
    Console.WriteLine("truoc khi sort");
                for (
    int i 0l.Counti++)
                {
                    
    Console.WriteLine(l[i].ToString());
                }


                
    Console.WriteLine("saukhi sort");
                
    l.Sort();//khong chay                <---------------day ne tai sao nhi------------
                
    for (int i 0l.Counti++)
                {
                    
    Console.WriteLine(l[i].ToString());
                }
                
    Console.ReadLine();

            }
        }

    Đã được chỉnh sửa lần cuối bởi angeltrongminh : 22-04-2009 lúc 09:38 AM.

  2. #2
    Ngày gia nhập
    03 2009
    Bài viết
    149

    sao lâu vậy nhỉ. hok thấy bác nào giúp để thank cái

  3. #3
    Ngày gia nhập
    04 2009
    Bài viết
    6

    PHP Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    namespace 
    Compare_2_
    {
        public class 
    oto IComparable
        
    {
            private 
    string ten;

            public 
    string Ten
            
    {
                
    get { return ten; }
                
    set ten value; }
            }
            private 
    int km;

            public 
    int Km
            
    {
                
    get { return km; }
                
    set km value; }
            }
            public 
    oto(string tint k)
            {
                
    Ten t;
                
    Km k;

            }
            public 
    void xuat()
            {
                
    Console.WriteLine("Ten :" Ten.PadRight(10' ') + " , km da chay : " Km.ToString());

            }
            public 
    override string ToString()
            {
                return 
    "Ten :" Ten.PadRight(10' ') + " , km da chay : " Km.ToString();
            }
            
    //public int Compare( object b)
            //{
                
            
            //}


            #region IComparable Members

            
    public int CompareTo(object obj)
            {
                
    oto r obj as oto;
                
                if (
    string.Compare(this.Tenr.Tentrue) == 1)
                    return 
    1;
                if (
    string.Compare(this.Tenr.Tentrue) == 0)
                    return 
    0;
                return -
    1;
            }

            
    #endregion
        
    }
        class 
    Program
        
    {
            static 
    void Main(string[] args)
            {

                
    ArrayList l = new ArrayList();
                
    l.Add(new oto("jupiter"500));
                
    l.Add(new oto("suzuko"340));
                
    l.Add(new oto("bamomo"50));
                
    l.Add(new oto("xmen"540));

                
    Console.WriteLine("truoc khi sort");
                for (
    int i 0l.Counti++)
                {
                    
    Console.WriteLine(l[i].ToString());
                }


                
    Console.WriteLine("saukhi sort");
                
    l.Sort();//khong chay                <---------------day ne tai sao nhi------------
                
    for (int i 0l.Counti++)
                {
                    
    Console.WriteLine(l[i].ToString());
                }
                
    Console.ReadLine();

            }
        }

    arraylist cần object của nó kế thừa từ IComparable chứ hok phải IComparer , bạn nhầm rồi

  4. #4
    Ngày gia nhập
    03 2009
    Bài viết
    149

    thank nhưng mình muốn sài


    PHP Code:
       public int Compare(object aobject b)
            {
                
    oto l = (oto)a;
                
    oto r = (oto)b;
                if (
    string.Compare(l.Tenr.Tentrue) == 1)
                    return 
    1;
                if (
    string.Compare(l.Tenr.Tentrue) == 0)
                    return 
    0;
                return -
    1;
            } 
    thì sao nhỉ. tại thầy trên lớp làm được mình nhìn qua về làm lại thôi.

  5. #5
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    Muốn dùng comparer thì gọi l.Sort(MyComparer);
    trong đó MyComparer là instance của 1 lớp hiện thực giao diện IComparer (do bạn tự định nghĩa) và hiện thực method int Compare (Object x, Object y), ví dụ như oto của bạn chẳng hạn.
    l.Sort(new oto("jupiter", 500));

  6. #6
    Ngày gia nhập
    10 2010
    Bài viết
    1

    Mặc định sort dùng Icomparer | Sắp xếp dùng Icomparer trên C#?

    Vậy các bạn cho mình hỏi thêm là, muốn sử dụng IComparable để xắp xếp theo nhiều tiêu chí khác nhau thì thế nào?
    VD: ưu tiên xắp xếp theo tên rồi đến họ, sau đó là xắp xếp đến điểm

  7. #7
    Ngày gia nhập
    06 2010
    Nơi ở
    Hà Nội
    Bài viết
    48

    Mình có code theo ý bạn mún đây.Mình cũng vừa làm xong bài này sắp xếp ưu tiên theo tên đến họ và tên đệm.
    PHP Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;

    namespace 
    ConsoleApplication1
    {
        class 
    Program
        
    {
            public class 
    SINHVIEN IComparable
            
    {
                public static 
    int SoSanh(string sv1string sv2)
                {
                    return 
    sv1.CompareTo(sv2);
                }
                public 
    int CompareTo(object student)
                {
                    
    SINHVIEN sv student as SINHVIEN;
                    if (
    DIEMTRUNGBINH sv.DIEMTRUNGBINH)
                        return 
    1;
                    else if (
    DIEMTRUNGBINH == sv.DIEMTRUNGBINH)
                        return 
    0;
                    else return -
    1;
                }
                private 
    string MSV;
                private 
    string HoTenSV;
                private 
    double DiemTB;
                private 
    string MASINHVIEN
                
    {
                    
    get { return MSV; }
                    
    set MSV value; }
                }

                public 
    string HOTEN
                
    {
                    
    get { return HoTenSV; }
                    
    set HoTenSV value; }
                }

                public 
    double DIEMTRUNGBINH
                
    {
                    
    get { return DiemTB; }
                    
    set DiemTB value; }
                }
                public 
    SINHVIEN() { }
                public 
    SINHVIEN(string astring bdouble c)
                {
                    
    this.MSV a;
                    
    this.HoTenSV b;
                    
    this.DiemTB c;
                }
                public 
    void Nhap()
                {
                    
    //Console.Write("Code Student: ");
                    //MSV = Console.ReadLine();
                    
    Console.Write("Fullname: ");
                    
    HoTenSV Convert.ToString(Console.ReadLine());
                    
    Console.Write("Diem Trung Binh:");
                    
    DiemTB Convert.ToDouble(Console.ReadLine());
                }
                public 
    void Xuat()
                {
                    
    Console.WriteLine("HoTen:      " HOTEN.PadRight(20)+"DiemTB:     "+DIEMTRUNGBINH);
                }

                public class 
    newSinhVien IComparer
                
    {
                    public 
    int Compare(object sinhvien1object sinhvien2)
                    {
                        
    SINHVIEN sv1 sinhvien1 as SINHVIEN;
                        
    SINHVIEN sv2 sinhvien2 as SINHVIEN;
                        
    int kt 0;
                        
    string[] str1 sv1.HoTenSV.ToLower().Split(' ');
                        
    string[] str2 sv2.HoTenSV.ToLower().Split(' ');
                        
    kt SINHVIEN.SoSanh(str1[str1.Length 1], str2[str2.Length 1]);//so sanh theo ten
                        
    if (kt == 0)
                        {
                            
    kt SINHVIEN.SoSanh(str1[0], str2[0]);//so sanh theo ho
                        
    }
                        if (
    kt == 0)
                        {
                            
    string tam1 sv1.HoTenSV.Substring(str1[0].Length, (sv1.HoTenSV.Length str1[0].Length str1[str1.Length 1].Length 1)).Trim();
                            
    string tam2 sv2.HoTenSV.Substring(str2[0].Length, (sv2.HoTenSV.Length str2[0].Length str2[str2.Length 1].Length 1)).Trim();
                            
    kt SINHVIEN.SoSanh(tam1tam2);
                        }
                        return 
    kt;
                    }
                }
            }
            static 
    void Main(string[] args)
            {
                
    Console.Write("Bao Nhieu SV:");
                
    int n int.Parse(Console.ReadLine());
                
    ArrayList ArrList=new ArrayList();
                
    SINHVIEN[] SV = new SINHVIEN[n];
                for (
    int i 0ni++)
                {
                    
    SV[i] = new SINHVIEN();
                    
    Console.WriteLine("------");
                    
    Console.WriteLine("Student" + (1));
                    
    SV[i].Nhap();
                    
    ArrList.Add(SV[i]);
                }
                
    SINHVIEN.newSinhVien SS = new SINHVIEN.newSinhVien();
                
    ArrList.Sort(SS);
                
    Console.Clear();
                foreach (
    SINHVIEN asv in ArrList)
                {
                    
    asv.Xuat();
                }
                Array.
    Sort(SV);
                
    Console.WriteLine("3 SV co diem cao nhat.");
                for (
    int i n-3<ni++)
                {
                    
    SV[i].Xuat();
                }
                
    Console.Write("Hello LuanNguyen43!!!");
                
    Console.ReadLine();
            }
        }


  8. #8
    Ngày gia nhập
    06 2010
    Nơi ở
    Hà Nội
    Bài viết
    48

    còn đây nữa sắp xếp theo tên,rồi đến điểm
    PHP Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace 
    ConsoleApplication1
    {
        class 
    Program
        
    {
            public class 
    SINHVIEN:IComparable
            
    {
                public 
    int CompareTo(object student)
                {
                    
    SINHVIEN sv=student as SINHVIEN;
                    if (
    string.Compare(this.HoTenSV,sv.HoTenSV,true)==1)
                        return 
    1;
                     else if (
    string.Compare(this.HoTenSV,sv.HoTenSV,true)==0)
                     {
                         if (
    DIEMTRUNGBINH sv.DIEMTRUNGBINH)
                             return 
    1;
                         else if (
    DIEMTRUNGBINH == sv.DIEMTRUNGBINH)
                             return 
    0;
                         else return -
    1;
                     }
                      return -
    1;
                }
                private 
    string MSV;
                private 
    string HoTenSV;
                private 
    double DiemTB;
                public 
    string MASINHVIEN
                
    {
                    
    get { return MSV; }
                    
    set MSV value; }
                }

                public 
    string HOTEN
                
    {
                    
    get { return HoTenSV; }
                    
    set HoTenSV value; }
                }

                public 
    double DIEMTRUNGBINH
                
    {
                    
    get { return DiemTB; }
                    
    set DiemTB value; }
                }
                
    //sử dụng contructor có tham số va không có tham số nhằm khi khai báo đối
                //tượng có thể truyền tham số hay không.
                
    public SINHVIEN(){}
                public 
    SINHVIEN(string a,string b,double c)
                {
                    
    this.MSV a;
                    
    this.HoTenSV b;
                    
    this.DiemTB c;
                }
                public 
    void Nhap()
                {
                    
    Console.Write("Code Student: ");
                    
    MSV Console.ReadLine();
                    
    Console.Write("Fullname: ");
                    
    HoTenSV Convert.ToString(Console.ReadLine());
                    
    Console.Write("Diem Trung Binh:");
                    
    DiemTB Convert.ToDouble(Console.ReadLine());
                }
                public 
    void Xuat()
                {
                    
    Console.WriteLine("             Code Student: " MASINHVIEN);
                    
    Console.WriteLine("             Fullname: " HOTEN);
                    
    Console.WriteLine("             DTB: " DIEMTRUNGBINH);
                }
            }
            static 
    void Main(string[] args)
            {
                
    Console.Write("Bao Nhieu SV:");
                
    int n int.Parse(Console.ReadLine());
                
    SINHVIEN[] SV = new SINHVIEN[n];
                for (
    int i 0<ni++)
                {
                    
    SV[i] = new SINHVIEN();
                    
    Console.WriteLine("------");
                    
    Console.WriteLine("Student" + (1));
                    
    SV[i].Nhap();
                }
                
    Console.Clear();
                  Array.
    Sort(SV);
                  
    Console.WriteLine("             ===ListStudent===");
                for (
    int i 0ni++)
                {
                    
    SV[i].Xuat();
                    
    Console.WriteLine("         **************************************");
                }
                
    Console.Write("             Hello LuanNguyen43!!!");
                
    Console.ReadLine();
            }
        }


Các đề tài tương tự

  1. Thuật toán C++ Ưu nhược điểm các kiểu sort Interchange sort, Selection sort, Insertion sort, Sharke sort , Quick sort, Heap sort
    Gửi bởi duythanhnguyen trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 7
    Bài viết cuối: 23-09-2013, 01:16 AM
  2. Cách custom Icomparer cho SortedList. So sánh lỗi: Failed to compare two elements in the array?
    Gửi bởi linh_060 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 25-07-2012, 09:52 PM
  3. Lỗi khi sử dụng IComparer trên C#?
    Gửi bởi Vaanres trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 7
    Bài viết cuối: 23-09-2010, 08:10 PM
  4. hỏi về giao diện Icomparer to
    Gửi bởi webshot trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 11-05-2010, 08:06 PM
  5. IComparable IComparer lỗi này là sao trời
    Gửi bởi angeltrongminh trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 22-04-2009, 01:56 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn