Home > other >  Sorted array using nested loops and substring method (C#)
Sorted array using nested loops and substring method (C#)

Time:03-31

I am trying to manually sort an array using string inputs that end with a number which I want to sort from highest to lowest.

For example I can start with this output: ,Name1: 1540 ,Name2: 2660 ,Name3: 80 ,Name4: 380

And in the end it should look like this: ,Name2: 2660 ,Name1: 1540 ,Name4: 380 ,Name3: 80

private string[] OrderHighToLow(string[] data)
    {
        string temp;
        for (int i = 0; i < data.Length; i  )
        {
            for (int y = 0; y < i; y  )
            {
                if (int.Parse(data[y].Substring((data[y].IndexOf(':')   2))) > int.Parse(data[i].Substring((data[i].IndexOf(':')   2)))) 
                {
                    temp = data[i];
                    data[i] = data[y];
                    data[y] = temp;
                }
            }
        }
        return data;
    }

This is what I have tested. According to me, this should work, but the point is it doesn't, the application just crashes. So, if anyone here can figure out why that may be, I would be very thankful. Thanks in advance.

CodePudding user response:

your comparison is worng

int.Parse(data[y].Substring((data[y].IndexOf(':')   2)))

less than Not greater than

 if (int.Parse(data[y].Substring((data[y].IndexOf(':')   2))) < int.Parse(data[i].Substring((data[i].IndexOf(':')   2)))) 

CodePudding user response:

This should do the job with the Help of System.Linq:

private string[] OrderHighToLow(string[] data)
{
    //create a temporary dictionary, which makes sorting easier
    var tmpMap = new Dictionary<string, int>();
    foreach (var item in data)
    {
        //split the string 
        var elems = item.Split(":");
        //add string and int pair to the dictionary
        tmpMap.Add(elems[0], int.Parse(elems[1]));
    }

    //sort Dictionary by value and use select to rebuild the string, then convert it back to an array
    return tmpMap.OrderByDescending(x => x.Value).Select(x => $"{x.Key}: {x.Value}").ToArray();
}

Hope this helps.

  • Related