webForumDet fria alternativet

Sortera tvådimensionell ArrayList med åäö

.NET

0 svar · 530 visningar · startad av Nianbig

Medlem sedan feb. 200616 inlägg
Frågan#1

Jag försöker sortera en tvådimensionell ArrayList, hittade nedan exempelkod på nätet som fungerar utmärkt så länge jag inte använder å, ä och ö.

Någon som vet varför å, ä, ö inte fungerar?

namespace ConsoleApplication5
{
    using System;
    using System.Collections;
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            ArrayList list = new ArrayList();
            list.Add(new Organizer("öögoodman", 23));
            list.Add(new Organizer("äyouthen", 94));
            list.Add(new Organizer("Abby", 45));
            list.Add(new Organizer("ådyugen", 12));
            list.Sort();
            Console.WriteLine("~~~~[ Default sorting ]~~~~");
            foreach (Organizer o in list)
            {
                Console.WriteLine(o.Key);

                // since we're already here, lets give it a new
                // comparer, so the next time we sort it will use
                // this by default.
                o.Comparer = new CaseInsensitiveComparer();

                // just to be fancy, lets sort on the key
                // instead of the value object
                o.SortOn = SortOn.Key;
            }
            Console.WriteLine("~~~~[ Case Insensitive sorting ]~~~~");
            list.Sort();
            foreach (Organizer o in list)
            {
                Console.WriteLine(o.Key);
            }
            // you can also specify a comparer in the sort call
            // list.Sort(new SomeOtherComparerObject());

            Console.ReadLine();
        }
    }

    public enum SortOn { Key, Value }
    public class Organizer : IComparable
    {
        string _key;
        object _value;
        SortOn _sortOn = SortOn.Value;
        IComparer _comparer;

        public SortOn SortOn { get { return _sortOn; } set { _sortOn = value; } }
        public object Value { get { return _value; } set { _value = value; } }
        public string Key { get { return _key; } set { _key = value; } }
        public IComparer Comparer { get { return _comparer; } set { _comparer = value; } }

        public Organizer(string key, object value)
        {
            _key = key;
            _value = value;
        }

        #region IComparable Members
        public int CompareTo(object obj)
        {
            if (_comparer != null)
            {
                if (_sortOn == SortOn.Value)
                {
                    return _comparer.Compare(_value, obj);
                }
                else
                {
                    return _comparer.Compare(_key, obj.ToString());
                }
            }
            else
            {
                // most objects also implement IComparable
                // so you can just return _value.CompareTo(obj);
                // otherwise you have to compare based on
                // the value of _value.
                if (obj == null) return 1;
                if (obj == _value) return 0;
                if (_value != obj) return -1;
                return 1;
            }
        }
        #endregion

    }
}
264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)