【问题标题】:vb.net order list by certain indexvb.net 特定索引的订单列表
【发布时间】:2017-08-10 18:00:52
【问题描述】:

我有一个整数列表 (0,1,2)
我想重新排序列表,但使用某个索引:
如果我选择 1,我想得到 (1,2,0)
如果我选择 2,我想得到 (2,0,1)

我创建了一个列表,然后尝试按索引对其进行排序,但我得到了不想要的结果!

Dim ind As New List(Of Integer) 
For l = 0 To n : ind.Add(l) : Next

Dim start As List(Of Integer) = ind.OrderBy(Function(v) v = index).ToList()

如果我使用 0,我会得到 1,2,0
如果我使用 1,我会得到 0,2,1!
如果我使用 2,我会得到 0,1,2!

【问题讨论】:

标签: .net vb.net list sorting


【解决方案1】:

如果您只需要通过从某个索引开始获取元素然后附加其余元素来旋转/移动列表,则无需排序。例如:

Dim A = {3, 6, 9}, L = A.Length, N = 2

Debug.Print(String.Join(",", A.Skip(N).Concat(A.Take(N)))) ' "9,3,6"

Debug.Print(String.Join(",", From i In Enumerable.Range(N, L) Select A(i Mod L))) ' "9,3,6"

对它们进行排序可能在大多数情况下都有效,但可能不是全部:

Debug.Print(String.Join(",", From e In A Order By e < A(N))) ' "9,3,6" 

也可以直接生成列表而不进行移位或排序:

Debug.Print(String.Join(",", From i In Enumerable.Range(N, L) Select i Mod L)) ' "2,0,1"

【讨论】:

  • 谢谢,解决了,想了几天怎么改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 2017-08-03
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 2016-09-20
相关资源
最近更新 更多