簡體   English   中英

按升序對SortedList中的值進行排序

[英]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>

這就是我按照所需順序對列表進行排序所做的。

  1. 從查詢中對表進行排序
  2. 添加帶前導零的key_value.PadLeft(4, '0'); (例如key_value.PadLeft(4, '0');
  3. 將鍵值對添加到排序列表
  4. 現在列表已按我的意圖排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM