如何将哈希表转换为数组?


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+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.