我有一種方法可以接受string[]
。它採用這個數組並根據我們擁有的自定義代數公式對其進行排序。這個代數公式是相當複雜的,不能(或不應該)適應除IEnumerable<string>
之外的其他任何東西。快速對對象列表進行排序以匹配包含屬性值的數組的順序
我的任務是爲此方法創建一個包裝函數,該函數接受IEnumerable<T>
,其中T
實現了一個接口,該接口公開要用於排序的字符串。
基於此,我創建了一個迭代遺傳枚舉的方法,提取字符串並將結果數組傳遞給我們的自定義排序函數。這工作,但我結束了一個排序的字符串數組,完全斷開原來的IEnumerable <T>
。我如何排序IEnumerable <T>
以匹配從我們的自定義排序函數返回的字符串數組?
例如。
private IEnumerable<T> Sort(IEnumerable<T> objects) where T: ICustomSortable
{
string[] stringsToSort = new string[objects.Count()];
for (int i = 0; i < stringsToSort.length; i++)
stringsToSort[i] = objects.getString();
stringsToSort = customSortFunction(stringsToSort);
//somehow sort the objects so that they are in the same order as stringsToSort?
/*
The result is valid when:
objects[0].getString() == stringsToSort[0]
objects[1].getString() == stringsToSort[1]
objects[2].getString() == stringsToSort[2]
...
objects[n].getString() == stringsToSort[n]
*/
}
編輯:從customSortFunction
檢索的字符串可能不是唯一的。這意味着兩個字符串相同的objects
都應該存在於結果中。雖然具有相同字符串值的objects
的排序是無關緊要的,但在整體引用結果時應該保持原樣。
您是否需要使用customSortFunction()作爲一個整體?你能比較兩個字符串嗎?像'bool customCompare(string1,string2);'? – realharry
不需要我必須使用自定義功能。我必須將它作爲一個整體傳遞給它。 –
好的。我想這是因爲性能的原因?因爲可以通過調用'customSortFunction()'並在排序前後比較對,輕鬆實現'customCompare()'函數。 (一對是一個列表,畢竟是一個2元素的列表。) – realharry