IEnumerable 按位置索引排序

IEnumerable order by positional index

我正在尝试通过索引定位对 IEnumerable 对象进行排序。示例:

IEnumerable:

//index  1       2    3
[0] {"result1", "3", "15"}
[1] {"result2", "4", "3"}
[2] {"result3", "1", "1"}
[3] {"result4", "5", "11"}

我想按第 3 个索引定位排序,我的预期结果是这样的:

[0] {"result3", "1", "1"}
[1] {"result2", "4", "3"}
[2] {"result4", "5", "11"}
[3] {"result1", "3", "15"}

我尝试过类似的方法,但没有成功:

private void UpdateGrouping(IEnumerable<List<string>> grouping)
{
    grouping.OrderBy(p => grouping.IndexOf(3));
}

您需要覆盖结果,通过 ref 传递分组并在您的函数中覆盖它:

我假设排序索引是一个整数,否则相应地改变

private void UpdateGrouping(ref IEnumerable<List<string>> grouping)
{
    grouping = grouping.OrderBy(p => int.TryParse(p[2], out int index)?index:0);
}

或return有序列表并在您的函数外覆盖

private IEnumerable<List<string>> UpdateGrouping(IEnumerable<List<string>> grouping)
{
    return grouping.OrderBy(p => int.TryParse(p[2], out int index)?index:0);
}

您也可以使用 PadLeft() 在数字前添加一些零并正确排序。

    private void UpdateGrouping(ref IEnumerable<List<string>> grouping)
    {
        grouping = grouping.OrderBy(p => p[2].PadLeft(5, '0'));
    }

这里的 5 只是一个示例,对于更大的数字,您必须使用更大的长度。