3
我想對列表進行排序,並將地圖從元素的舊位置保存到新位置?如何對列表進行排序,將地圖從舊位置保存到新位置?
例如,如果在列表中進行排序是
var words = "once upon a midnight dreary".Split();
// once upon a midnight dreary
然後排序列表將是
var orderedWords = words.OrderBy(w => w).ToArray();
// a dreary midnight once upon
然後,因爲「一次」從位置0移動到位置3,在地圖將是
0 => 3, 1 => 4, 2 => 0, 3 => 2, 4 => 1
所以,對於所有的i
words[i] = orderedWords[map[i]]
我該怎麼做?我認爲它應該有可能在與普通排序相同的時間複雜度,即。爲O(n log n)的
我想:
var map = words.Select((word, index) => new { Word = word, Index = index}).OrderBy(x => x.Word).Select(x => x.Index);
但是這給
> 2, 4, 3, 0, 1
從而未能我上面給了身份
for(int i = 0; i < words.Length; i++)
Assert.AreEqual(words[i], orderedWords[map[i]]);
酷我如何得到「舊索引到新索引」數據結構呢? –
@ColonelPanic:你什麼意思? –
我想要一個滿足身份/單元測試的數據結構'map'i –