【发布时间】:2014-08-28 20:37:17
【问题描述】:
我需要找到以自定义顺序获取一小部分字符串或字符的最快方法。 我发现了很多关于对列表进行排序的问题,但在看板或网络上没有关于使用原生类型对小列表进行排序的问题,我发现的只是复杂得多。
对我来说,我的输入列表是字符串列表还是字符列表并不重要。我的列表有 5 - 7 个项目,它们看起来像这样:“1”、“Q”、“A”、“8”、“9”。我想让我的输入按如下顺序排列:“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“1”、“J”, “Q”、“K”、“A”。
我尝试了以下代码:
1 = 3.1-3.5 毫秒:
static readonly List<String> codeValueSortOrder = new List<String>
{
"2", "3", "4", "5", "6", "7", "8", "9", "1", "J", "Q", "K", "A"
};
input.OrderBy(i => codeValueSortOrder.IndexOf(i.ToString())).ToList();
2 = 5.0-6.0 毫秒:
input.OrderBy(i => i[1] == 'A')
.ThenBy(i => i[1] == 'K')
.ThenBy(i => i[1] == 'Q')
.ThenBy(i => i[1] == 'J')
.ThenBy(i => i.Substring(1, i.Length - 1) == "10")
.ThenBy(i => i[1] == '9')
.ThenBy(i => i[1] == '8')
.ThenBy(i => i[1] == '7')
.ThenBy(i => i[1] == '6')
.ThenBy(i => i[1] == '5')
.ThenBy(i => i[1] == '4')
.ThenBy(i => i[1] == '3')
.ThenBy(i => i[1] == '2')
.ToList();
我还在 codeproject 上查看了一些项目,但是这些代码用于数百万个项目,如果我们只想对 5 到 7 个项目进行排序,我无法想象它们是最有效的方法。我的目标是在 0.1 毫秒内执行排序,我不知道是否有可能实现该目标 :)
【问题讨论】:
-
你能发布你的基准测试代码吗?
-
这些值总是相同的 7 个值吗?如果是这样,那么您可能只需使用所需顺序的值初始化数组
-
项目是否可以重复?和@Sayse:op 想要在 5 到 7 个项目之间进行排序,我认为它们是随机的。
-
是的,这些项目会重复几次,最多重复 4 次。它们是随机的。
-
无论性能如何,我都不会使用第二种方法。维护噩梦。
标签: c# performance list sorting