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
}
}