Listbox Auto sort numbers but exclude string

Viewed 57

I'm trying to make a leaderboard in Windows forms using c# but I can't come up with a solution.

Here is my current code.

lstleaderboard.Items.Add(int.Parse(txtScore.Text));
ArrayList Sorting = new ArrayList();

foreach (var o in lstleaderboard.Items)
{
    Sorting.Add(o);
}

Sorting.Sort(new ReverseSort());

lstleaderboard.Items.Clear();

foreach (var o in Sorting)
{
    lstleaderboard.Items.Add(o);
}

And I tried altering the code like this:

lstleaderboard.Items.Add(int.Parse(txtScore.Text));
ArrayList Sorting = new ArrayList();

foreach (var o in lstleaderboard.Items)
{
    Sorting.Add(o);
}

Sorting.Sort(new ReverseSort());

lstleaderboard.Items.Clear();

foreach (var o in Sorting)
{
    lstleaderboard.Items.Add(o + txtName.Text );
}

if (lstleaderboard.Items.Count == 11)
{
    lstleaderboard.Items.RemoveAt(lstleaderboard.Items.Count - 1);
}

but this did not really work since it was then also sorting the names which messed up the scoreboard and it showed the wrong results, number one could be number three for example.

I am still learning so I apologize if my question is silly or my code is "weird"

Thanks

also here is my sorting class:

public class ReverseSort : IComparer
{
    public int Compare(object x, object y)
    {
        return Comparer.Default.Compare(y, x);
    }
}
1 Answers

So lstLeaderBoard is just list of integers, so you can safely use integer comparison, the way you did it, it just uses some default comparer on object type, which is far away from integer.

So simple LINQ OrderBy would suffice:

lstLeaderBoard.Items.Add(int.Parse(txtScore.Text));
var sortedItems = lstLeaderBoard.Items.Cast<int>().OrderBy(x => x);
lstLeaderBoard.Items.Clear();
foreach (var item in sortedItems)
    lstLeaderBoard.Items.Add(item);
Related