首頁 >後端開發 >C++ >如何取得哈希表元素作為排序數組?

如何取得哈希表元素作為排序數組?

WBOY
WBOY轉載
2023-08-26 22:53:211126瀏覽

如何取得哈希表元素作為排序數組?

雜湊表是根據鍵的雜湊碼排列的鍵值對的非通用集合。哈希表用於建立使用哈希表進行儲存的集合。哈希表透過計算每個鍵的雜湊碼並將其儲存在內部籃子中來優化查找。當我們從雜湊表中存取特定值時,該雜湊碼與指定的鍵相符。

此哈希表集合在 C# 的 System.Collections 命名空間中定義。表示哈希表集合的類別是“Hashtable”類別。此類別提供建構函數、方法和屬性來操作雜湊表集合。預設情況下,哈希表集合是未排序的。如果我們想要一個排序的雜湊表集合,我們需要將其表示為 Array 或 ArrayList 的形式,並對元素進行排序。

在本文中,我們將了解如何取得排序數組形式的雜湊表元素。那麼就讓我們開始吧。

取得哈希表元素作為排序數組

我們知道,預設情況下,哈希表集合是未排序的。對哈希表集合進行排序可能非常困難,因為我們根據鍵創建哈希表集合,然後向每個鍵添加值。

如果我們想要對雜湊表集合進行排序,我們必須根據鍵或值對其進行排序。 Hashtable 類別中沒有直接的方法可以對雜湊表集合進行排序。所以我們必須求助於其他方法。

其中一種方法是將雜湊表元素(鍵或值)作為排序數組來取得。為此,我們將遵循下面列出的步驟。

  • 建立哈希表物件

  • #用鍵值對填入此物件

  • 建立一個字串類型的數組,長度=雜湊表的長度

  • 根據鍵遍歷雜湊表,並用每個鍵填入陣列

  • 對產生的陣列進行排序

範例

我們使用 C# 編寫了此方法,如下所示。

using System;
using System.Collections;
class Program {
   public static void Main() {
     
      // Create a Hashtable
      Hashtable langCodes = new Hashtable();
 
      // Add elements to the Hashtable
      langCodes.Add("C++", "CPlusPlus");
      langCodes.Add("C#", "CSharp");
      langCodes.Add("Java", "Java");
      langCodes.Add("PL", "Perl");
      langCodes.Add("PG", "Prolog");
      int k = langCodes.Count;
     
      // create array of length = hashtable length
      string[] sortedArray = new string[k];
 
      // Retrieve key values in Array
      int i = 0;
      Console.WriteLine("Hashtable langCodes Contents:");
      foreach (DictionaryEntry de in langCodes) {
         Console.WriteLine("{0} ({1}) ", de.Key, de.Value);
         sortedArray[i] = de.Key.ToString();
         i++;
      }
      Array.Sort(sortedArray);
      Console.WriteLine("Contents of sorted array based on Hashtable keys:");
      foreach (var item in sortedArray) {
         Console.WriteLine(item);
      }
   }
}

在此程式中,我們定義一個 Hashtable 物件 langCodes 並填入它 與鍵值對。然後我們檢索哈希表的長度並使用 這個長度聲明一​​個數組「sortedArray」。接下來我們遍歷 langCodes 雜湊表並使用鍵填入排序後的陣列對象 langCodes 哈希表的值。

然後我們使用篩選器 Array.Sort(sortedArray) 對陣列進行排序並列印 這個排序數組。

輸出

程式的輸出如下。

#
Hashtable langCodes Contents:
PG (Prolog) 
Java (Java) 
C# (CSharp) 
PL (Perl) 
C++ (CPlusPlus) 
Contents of sorted array based on Hashtable keys:
C#
C++
Java
PG
PL

從輸出中,我們可以看到哈希表鍵元素被檢索為元素的排序數組。

現在我們再舉一個例子。我們使用上面討論的相同方法。唯一的區別是在此範例中,我們將使用值而不是哈希表中的鍵填充數組。

範例

讓我們看看完整的 C# 程式。

using System;
using System.Collections;
class Program {
   public static void Main() {
      // Create a Hashtable
      Hashtable numberNames = new Hashtable();
     
      // Add elements to the Hashtable
      numberNames.Add(12, "Twelve");
      numberNames.Add(2, "Two");
      numberNames.Add(65, "Sixty Five");
      numberNames.Add(15, "Fifteen");
      numberNames.Add(18, "Eighteen");
      int k = numberNames.Count;
      
      //create array of length = hashtable length
      string[] sortedArray = new string[k];

      // Retrieve hashtable values in array.
      int i = 0;
      Console.WriteLine("Hashtable langCodes Contents:");
      foreach (DictionaryEntry de in numberNames) {
         Console.WriteLine("{0} ({1}) ", de.Key, de.Value);
         sortedArray[i] = de.Value.ToString();
         i++;
      }
      Array.Sort(sortedArray);
      Console.WriteLine("Contents of sorted array based on Hashtable values:");
      foreach (var item in sortedArray) {
         Console.WriteLine(item);
      }
   }
}

該程式有一個哈希表對象,numberNames。我們用數字及其相應的數字名稱填充它。透過遍歷哈希表,我們用值填充排序數組。然後我們使用 Array.Sort() 篩選器對陣列進行排序並列印排序後的陣列。

輸出

程式的輸出如下所示。

#
Hashtable langCodes Contents:
18 (Eighteen) 
12 (Twelve) 
65 (Sixty Five) 
2 (Two) 
15 (Fifteen) 
Contents of sorted array based on Hashtable values:
Eighteen
Fifteen
Sixty Five
Twelve
Two

從輸出中,我們可以看到陣列的內容(雜湊表中的值)確實是按字母順序排序的。我們可以輕鬆比較雜湊表和排序數組的輸出。在哈希表中,輸出未排序。鍵值對隨機顯示。在數組中時,輸出已排序。

雖然對哈希表元素進行排序很困難,但我們可以透過將哈希表元素表示為數組來進行排序。但同時對鍵和值進行排序是不可能的。我們可以檢索數組中的所有鍵或數組中的所有值。然後我們可以使用 Array.Sort() 篩選器對陣列進行排序。我們也可以將哈希表轉換為數組或數組列表並對其進行處理。

以上是如何取得哈希表元素作為排序數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除