我有一组数据,我想从特定的数字开始重新排序,然后,当达到最高数字时,返回到最低值,然后继续递增.
例如,对于序列(1,2,3,4,5,6),如果4是特定数字,则顺序将变为(4,5,6,1,2,3).
这对linq&c#有可能吗?
L.B*_*L.B 27
List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };
int num = 4;
var newList = list.SkipWhile(x=>x!=num)
.Concat(list.TakeWhile(x=>x!=num))
.ToList();
Run Code Online (Sandbox Code Playgroud)
Che*_*hen 10
int specific = 4;
var numbers = Enumerable.Range(1, 9);
var result = numbers.OrderBy(n => Tuple.Create(n < speficic, n)).ToList();
Run Code Online (Sandbox Code Playgroud)
我在这里使用一个小技巧,Tuple<bool, int>用作比较器,因为false < true.另一种选择是:
var result = numbers.OrderBy(n => n < speficic).ThenBy(n => n).ToList();
Run Code Online (Sandbox Code Playgroud)
在基准测试后编辑我发现第二个解决方案.OrderBy .ThenBy比Tuple解决方案快得多.我相信这是因为FCL Comparer<T>.Default用作比较器,这需要花费时间来构建.
| 归档时间: |
|
| 查看次数: |
2907 次 |
| 最近记录: |