是否可以从OrderBy中提取重新排列图?

时间:2014-12-27 11:04:20

标签: arrays vb.net sorting

我有一个名为“banana”的类的列表,如下所示

Class Banana
    Public Ripeness as single
End Class

Dim bananas as new List(of Banana)

现在我需要一个指数列表,按照成熟度对香蕉进行排序,如果香蕉列表如下:

(0) .Ripeness = 2
(1) .Ripeness = 1
(2) .Ripeness = 5

然后整数列表应为“1,0,2”。我实际上并不需要重新排序香蕉列表本身,重要的是它保持相同的顺序。

现在我通过扫描整个香蕉列表来获取列表,以获得下一个最低成熟度,并将索引添加到整数列表中。问题在于它的速度很慢(有成千上万的香蕉),使用内置的OrderBy函数重新排序对象的速度比我生成索引列表快7倍。有没有办法获得OrderBy应用于列表的映射?

1 个答案:

答案 0 :(得分:2)

这个怎么样:

bananas.Select((i, banana) => select new { Index=i, Banana=banana})
       .OrderBy(x => x.Banana)
       .Select((newIndex, x) => new { NewIndex=newIndex, x.Index})
       .OrderBy(x => x.Index)
       .Select(x=> x.NewIndex)
       .ToList();

如果这是您正在寻找的内容,则会调用该过程"查找元素等级"