[英]Sort the value in SortedList by ascending order
我在我的應用程序中使用SortedList。默認情況下,列表按鍵按升序排序。我需要按值按升序排序SortedList,而不是按鍵。
SortedList sortinlist = new SortedList();
public bool Add(string val1, string val2)
{
Reading reading = new Reading(val1, val2);
sortinlist .Add(val1, val2);
return true;
}
我對同樣的話題感到茫然,並且審視了一些話題,我不清楚這樣做。任何人都可以幫助我這樣做。
謝謝
您可以使用SortedList
的通用版本,用於示例:
包括Linq命名空間:
using System.Linq;
試試這個:
SortedList<string, string> sortinlist = new SortedList<string, string>();
var result = sortinlist.OrderBy(x => x.Value).ToList();
您將不會獲得新的SortedList,因為默認行為是按Key
排序的。
正如@Tim評論所示,您可以嘗試使用非Cast<>
- 通用版本和Cast<>
方法將輸出轉換為IEnumerable<DictionaryEntry>
並從那里開始訂購。
var result = sortinlist.Cast<DictionaryEntry>().OrderBy(x => x.Value);
也許您應該重新考慮更改您正在使用的數據和數據結構。 正如在SortedList
的文檔頁面中所寫,它“表示按鍵排序的鍵/值對的集合,可通過鍵和索引訪問。” 這意味着您必須使用一些更適合您案例的其他數據結構(例如List <KeyValuePair<TKey,TVal>>
)並按值對其進行排序。
如果值保證是唯一的,您可以使用兩個SortedLists或SortedDictionaries(順便說一句,如果您不按順序插入數據,SortedDictionary會更有效,所以我會將它用於第二個集合):
SortedList sortinlist = new SortedList();
SortedDictionary valueOrder = new SortedDictionary<string, string>();
public bool Add(string val1, string val2)
{
Reading reading = new Reading(val1, val2);
sortinlist.Add(val1, val2);
valueOrder.Add(val2, val1);
return true;
}
如果不保證值是唯一的,那么您可以在需要按值順序的數據時計算新集合(這里,我假設sortinlist是SortedList<string, string>
或其他一些實現IDictionary<string, string>
類型IDictionary<string, string>
):
var valueOrder = sortinlist.OrderBy(kvp => kvp.Value).ToList();
......或維護一個單獨的集合:
SortedList<string, string> sortinlist = new SortedList<string, string>();
List<KeyValuePair<string, string>> valueOrder = new List<KeyValuePair<string, string>>();
public bool Add(string val1, string val2)
{
Reading reading = new Reading(val1, val2);
sortinlist.Add(val1, val2);
int targetIndex = /* to do: calculate proper index */
valueOrder.Insert(targetIndex, new KeyValuePair<string, string>(val2, val1));
return true;
}
如果您僅使用SortedList是因為您希望能夠按值對其進行排序,請使用Dictionary<string, string>
。
這就是我按照所需順序對列表進行排序所做的。
key_value.PadLeft(4, '0');
(例如key_value.PadLeft(4, '0');
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.