在C#中排序List <int []>的行

时间:2015-07-20 12:01:32

标签: c# list

我有一个@RequestMapping(value = "/demp", method = RequestMethod.PUT) public String demo(@RequestBody String request) { HttpServletRequest re3 = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()).getRequest(); return "sfsdf"; } ,每行有5行30个元素...... 我需要以ascendent顺序排序每一行的元素。

放入sol_iniziale的元素来自我读过的文件。 示例:

如果我有:List<int[]> sol_iniziale = new List<int[]>();

我想要结果:{{2 1 55 23 3}, {44 7 88 2 1}}

我写了一个函数,但输出顺序不正确...如果我有 {{1, 2, 3, 23, 55}, {1, 2, 7, 44, 88}}输出为{51, 0, 1, 5, 5, 0}, ..我不明白(可能是愚蠢的)错误在哪里!

提前谢谢。

{0, 1, 5, 5, 0, 51}

5 个答案:

答案 0 :(得分:1)

static void Main(string[] args)
{
    List<int[]> nums = new List<int[]> { new int[] { 3, 1, 2 }, new int[] { 5, 2, 4 } };
    foreach (var row in nums)
    {
        Array.Sort(row);
    }

    foreach (var row in nums)
    {
        foreach (int i in row) Console.Write(i + " "); 
    }
}

答案 1 :(得分:1)

使用Linq,您可以执行以下操作:

IEnumerable<int[]> res = sol_iniziale.Select(t => {
    Array.Sort(t);
    return t;
});

如果要返回List而不是IEnumerable,只需执行:

res.ToList();

答案 2 :(得分:1)

您可以使用上述每种解决方案,或者只需更正您的解决方案:

void Ordina_sol_iniziale() 
{
    int temp = 0;
    int temp2 = 0;
    for (int i = 0; i <= nzaini; i++) //5 rows
    {
        for (int y = 0; y < nogg; y++) //30 elements of each row
        {
            for (int j = y + 1; j <= nogg; j++)
            {  
                temp = sol_iniziale[i][j];
                temp2 = sol_iniziale[i][y];
                if (temp < temp2)
                {
                    sol_iniziale[i][y] = temp2;
                    sol_iniziale[i][y+1] = temp;
                }
            }
        }
    }
}

答案 3 :(得分:0)

我建议你使用Linq这样的东西。例如:

List<int[]>

注意:

如果您出于特定目的而想要ToArray(),则可以加入ToList()var sorted = yourList.Select(innerList => innerList.OrderBy(elm => elm).ToArray()).ToList();

create

这将选择每个列表,并将其返回排序。

答案 4 :(得分:0)

除非您尝试实现冒泡排序算法,否则应使用Array.Sort()函数。