如何將雜湊錶轉換為陣列?
C# 中的雜湊表集合是一個非泛型集合,其專案表示為鍵值對。每個鍵都是唯一的非空元素。另一方面,值可以重複和/或為空。
C# 中的 Hashtable 類表示雜湊表集合。此類提供了建立物件、更改集合中的專案等的相關方法。
雜湊表集合可以用 C# 中的陣列或 ArrayList 表示。在本文中,我們將討論如何將雜湊表集合轉換為陣列。
如何將雜湊錶轉換為陣列?
要將雜湊錶轉換為陣列,C# Hashtable 類提供了一個名為“CopyTo”的方法。CopyTo 方法將雜湊表專案複製到陣列中。
CopyTo 方法的原型如下所示。
語法
public virtual void CopyTo (Array array, int arrayIndex);
引數
array − 來自雜湊表的 DictionaryEntry 物件的目標位置。這是一個具有基於零的索引的一維陣列。
arrayIndex − 一個整數 (Int32) 值,指示目標陣列的基於零的索引。表示複製開始的位置。
實現
CopyTo(Array, Int32)
描述
Hashtable.CopyTo(Array, Int32) 方法將 Hashtable 的元素複製到指定索引處的一維 Array 例項。
名稱空間
System.Collections
異常
ArgumentNullException − 當目標陣列為 null 時,將引發此異常。
ArgumentOutOfRangeException − 如果指定的 arrayIndex 小於零,則引發此異常。
ArgumentException − 如果陣列是多維陣列,則引發此異常。或者,要複製的雜湊表元素大於目標陣列中的可用空間。
InvalidCastException − 當型別不匹配時,將引發此異常。即雜湊表型別不能自動轉換為目標陣列型別。從上面的原型中,我們知道 CopyTo 方法將雜湊表元素複製到指定 arrayIndex 處的陣列中。從指定陣列索引開始的陣列元素將被雜湊表元素覆蓋。
現在讓我們實現一個程式設計示例來演示 CopyTo 方法。
在這裡,我們使用以下雜湊表。
鍵 |
值 |
---|---|
A |
FirstValue |
B |
SecondValue |
上述雜湊表元素將轉換為陣列。陣列定義如下。
索引 |
值 |
---|---|
0 |
She |
1 |
sells |
2 |
sea |
3 |
shells |
4 |
on |
5 |
the |
6 |
sea |
7 |
shore |
示例
現在,我們將使用 CopyTo 方法將雜湊表元素複製到從索引 = 6 開始的陣列中。此轉換的完整程式如下所示。
using System; using System.Collections; public class MyHashtable { public static void Main() { // Create and initialize hashtable var mySourceHT = new Hashtable(); mySourceHT.Add("A", "FirstValue"); mySourceHT.Add("B", "SecondValue"); // Create and initialize the one-dimensional Array. var myArray = new String[15]; myArray[0] = "She"; myArray[1] = "sells"; myArray[2] = "sea"; myArray[3] = "shells"; myArray[4] = "on"; myArray[5] = "the"; myArray[6] = "sea"; myArray[7] = "shore"; // Display the array first Console.WriteLine("The initial array:"); PrintValues(myArray, ' '); // Use CopyTo method to copy hashtable items to the array at index = 6 Console.WriteLine("New array after copying hashtable items keys:"); mySourceHT.Keys.CopyTo(myArray, 6); // Display the array values PrintValues(myArray, ' '); // Use CopyTo method to copy hashtable item values to the array at index //= 6 Console.WriteLine("After copying the values, starting at index 6:"); mySourceHT.Values.CopyTo(myArray, 6); // Display the array values PrintValues(myArray, ' '); } public static void PrintValues(String[] myArr, char mySeparator) { for (int i = 0; i < myArr.Length; i++) Console.Write($"{mySeparator}{myArr[i]}"); Console.WriteLine(); } }
在這個程式中,我們首先宣告並定義雜湊表。然後,我們宣告並定義陣列。接下來,使用 CopyTo 方法,我們將雜湊表元素複製到從索引 = 6 開始的陣列中。在這個程式中,首先,我們只複製雜湊表元素的鍵,然後複製值。輸出顯示陣列的所有狀態,例如初始陣列、複製雜湊表元素後的陣列等。
輸出
程式的輸出如下所示。
The initial array: She sells sea shells on the sea shore New array after copying hashtable items keys: She sells sea shells on the A B After copying the values, starting at index 6: She sells sea shells on the FirstValue SecondValue
上面的輸出顯示了初始陣列,然後顯示了複製雜湊表鍵後的陣列,然後是雜湊表值。
讓我們看另一個例子來清楚地理解 CopyTo 方法。
示例
該程式與之前的程式類似。我們在這裡更改了雜湊表。此外,我們為 CopyTo 方法使用了一個空陣列。完整的程式如下所示。
using System; using System.Collections; class myHashTable { public static void Main() { // Create a Hashtable named phonetics Hashtable phonetics = new Hashtable(); // Add key/value pairs in phonetics phonetics.Add("A", "Apple"); phonetics.Add("B", "Banana"); phonetics.Add("C", "Cat"); phonetics.Add("D", "Dog"); phonetics.Add("E", "Elephant"); phonetics.Add("F", "Fish"); //print hahshtable collection Console.WriteLine("Hashtable items:"); foreach(DictionaryEntry entry in phonetics){ Console.WriteLine("{0} and {1} ", entry.Key, entry.Value); } // Create a one-dimensional Array named myArr DictionaryEntry[] myArr = new DictionaryEntry[phonetics.Count]; // copy the Hashtable entries to array using the CopyTo method phonetics.CopyTo(myArr, 0); Console.WriteLine("Contents of Array after copying hashtable items:"); for (int i = 0; i < myArr.Length; i++) Console.WriteLine(myArr[i].Key + " --> "+ myArr[i].Value); } }
在這裡,我們使用 CopyTo 方法將雜湊表的所有元素複製到一個空陣列中。由於陣列為空,因此元素從陣列的開頭複製。因此,我們為 CopyTo 方法指定索引 = 0。
輸出
程式的輸出如下所示。
Hashtable items: B and Banana C and Cat A and Apple F and Fish D and Dog E and Elephant Contents of Array after copying hashtable items: B --> Banana C --> Cat A --> Apple F --> Fish D --> Dog E --> Elephant
在輸出中,我們首先顯示雜湊表,然後顯示陣列的內容。為了清晰起見,更改了雜湊表和陣列中元素的表示方式。
在本文中,我們演示瞭如何使用 C# 的 Hashtable 類的 CopyTo 方法將雜湊表專案轉換為陣列。CopyTo 方法接受陣列和索引作為引數,因此我們可以在陣列的任何部分複製雜湊表元素,而不必從開頭開始。要將雜湊表元素複製到陣列的開頭,我們將索引指定為 0。根據指定的陣列索引,CopyTo 方法將覆蓋陣列元素(如果有)的雜湊表元素。