如何將雜湊錶轉換為陣列?


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 方法將覆蓋陣列元素(如果有)的雜湊表元素。

更新於:2023年1月6日

1K+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告