05. maj 2007 - 08:38Der er
8 kommentarer og 1 løsning
ArrayList.Sort() laver vrøvl!
Hej folkens,
Hvorfor er det lige at min ArrayList VIL placere A forkert på en sorteret liste???
Se lige eksemplet her:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Collections;
namespace ArrayList_Exempel { public partial class Form1 : Form { ArrayList liste = new ArrayList(); public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { liste.Add("DDD"); // Smider nogle objekter ind :) liste.Add("AAA"); liste.Add("EEE"); liste.Add("BBB"); liste.Add("CCC"); liste.Add("XXX"); liste.Sort(); // Sorterer listen for (int i = 0; i < liste.Count; i++) { listBox1.Items.Add(liste[i]); // Placerer de sorterede elementer i listboxen } } } }
Problemet her er at resultatet bliver det her:
BBB CCC DDD EEE XXX AAA <-- Hvad fanden laver den i bunden af listen ?
Håber der er nogen der kan forklarer mig hvorfor - og måske komme med en løsning så AAA rent faktisk fremkommer øverst - som det vel burde her!
"If you try the 'Intl. Text 1', you will (depending on your language) usually not see any difference between 'invariant', 'local PC', and 'en-US'. Only the 'da-DK' will bring a difference."
Damnit! man :P - kun danmark der har fucked op på det her :P
Nej, MS har jo et verdensomspændende marked, så de skal tage hensyn til alle. Men du kan jo kode dig ud af det, som artiklen siger. Her bruger jeg "InvariantCulture" - jeg tror den virker, men er ikke sikker på om der er en anden. Du skal lave en klasse:
private class MinSort : IComparer { int IComparer.Compare(object x, object y) { string src = x.ToString(); string trg = y.ToString(); int result = string.Compare(src, trg, true,CultureInfo.InvariantCulture); return result; } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Collections; using System.Globalization;
namespace ArrayList_Exempel { public partial class Form1 : Form { ArrayList liste = new ArrayList(); public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { liste.Add("DDD"); liste.Add("AAA"); liste.Add("EEE"); liste.Add("BBB"); liste.Add("CCC"); liste.Add("XXX"); liste.Sort(new MinSort()); for (int i = 0; i < liste.Count; i++) { listBox1.Items.Add(liste[i]); } } } public class MinSort : IComparer { int IComparer.Compare(object x, object y) { string src = x.ToString(); string trg = y.ToString(); int result = string.Compare(src, trg, true, CultureInfo.InvariantCulture); return result; } } }
Mange mange tak :) - nu er min AA kommet i toppen :)
hmm ok :) - rigtigt mange tak for hjælpen så erik :) - super god support :)
Ha' det rigtigt godt :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.