1

だから私はクラスを持っています

Class MyClass{
    string myString;

    MyClass(string newString){
    myString = newString;
    }
}

そして私はこれらのリストを持っています

List<MyClass> myList = new List<MyClass>();
myList.Add(new MyClass(some string...);

List.Sortを使用して、クラスのフィールドの値に基づいてオブジェクトを並べ替えることはできますか?もしそうなら、どのように?

ありがとう

4

2 に答える 2

4

あなたが使用することができますEnumerable.OrderBy

myList = myList.OrderBy(x => x.myString).ToList();

ただし、これにより、古いリストに基づいて新しいリストが作成されることに注意してください。多くの場合、それは違いはありませんが、注意する必要があります。


または、.NET 2.0に制限されているため、比較用のカスタム関数を定義できます。

class MyClass
{
    string myString;

    ...

    public static int CompareByMyString(MyClass x, MyClass y)
    {
        return String.Compare(x.myString, y.myString);
    }
}

そしてそれをに提供しますList.Sort

myList.Sort(MyClass.CompareByMyString);
于 2013-03-06T14:34:00.303 に答える
0

IComparableから継承できます。この例は次のとおりです。

public class MyClass : IComparable
    {
        public int Day { get; set; }
        public int Hour { get; set; }

        public int CompareTo(object obj)
        {
            if (obj is MyClass)
            {
                MyClass slot = (MyClass)obj;

                if (Day < slot.Day)
                {
                    return -1;
                }
                else if (Day > slot.Day)
                {
                    return 1;
                }
                else
                {
                    if (Hour < slot.Hour)
                    {
                        return -1;
                    }
                    else if (Hour > slot.Hour)
                    {
                        return 1;
                    }
                    else
                    {
                        return 0;
                    }
                }
            }
            else
            {
                throw new ArgumentException("Object is not MyClass");
            }
        }

        public override int GetHashCode()
        {
            unchecked
            {
                return Day.GetHashCode() ^ Hour.GetHashCode();
            }
        }

        public override bool Equals(object obj)
        {
            if (obj is MyClass)
            {
                return this == (MyClass)obj;
            }
            else
            {
                throw new ArgumentException("Object is not MyClass");
            }
        }

        public static bool operator ==(MyClass a, MyClass b)
        {
            return a.CompareTo(b) == 0;
        }

        public static bool operator !=(MyClass a, MyClass b)
        {
            return a.CompareTo(b) != 0;
        }

        public static bool operator <(MyClass a, MyClass b)
        {
            return a.CompareTo(b) < 0;
        }

        public static bool operator >(MyClass a, MyClass b)
        {
            return a.CompareTo(b) > 0;
        }

        public static bool operator <=(MyClass a, MyClass b)
        {
            return a.CompareTo(b) <= 0;
        }

        public static bool operator >=(MyClass a, MyClass b)
        {
            return a.CompareTo(b) >= 0;
        }
    }

そして、あなたはこれを行うことができます:

List<MyClass> listOfStuff = new List<MyClass>();}
// Add some stuff to the list E.G. 
listOfStuff.add(new MyClass());
// Sort the list
listOfStuff.sort();
于 2013-03-06T14:57:10.717 に答える