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 只是一个示例,对于更大的数字,您必须使用更大的长度。
我正在尝试通过索引定位对 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 只是一个示例,对于更大的数字,您必须使用更大的长度。