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

csharpserver side programmingprogramming更新于 2025/5/10 17:22:17

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 的元素复制到指定索引处的一维数组实例。

命名空间

System.Collections

异常

  • ArgumentNullException − 当目标数组为空时,会引发此异常。

  • ArgumentOutOfRangeException − 如果指定的 arrayIndex 小于零,则抛出。

  • ArgumentException − 如果数组为多维。或要复制的哈希表元素大于目标数组中的可用空间。

  • InvalidCastException − 当类型不匹配时抛出此异常。即,哈希表类型无法自动转换为目标数组类型。从上面的原型中,我们知道 CopyTo 方法将哈希表元素复制到指定 arrayIndex 处的数组。指定数组索引中的数组元素将被哈希表元素覆盖。

现在让我们实现一个编程示例来演示 CopyTo 方法。

这里我们使用以下哈希表。

Key

value

A

FirstValue

B

SecondValue

上述哈希表元素将转换为数组。数组定义如下。

Index

value

0

She

1

sells

2

sea

3

shells

4

on

5

the

6

sea

7

shore

示例

现在我们将使用 CopyTo 方法将哈希表元素复制到从 index = 6 开始的数组中。此转换的完整程序如下所示。

using System;
using System.Collections;
public class MyHashtable {
   public static void Main() {

        // 创建并初始化哈希表
        var mySourceHT = new Hashtable();
        mySourceHT.Add("A", "FirstValue");
        mySourceHT.Add("B", "SecondValue");
        
        // 创建并初始化一维数组。
        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";
        
        // 首先显示数组
        Console.WriteLine("初始数组:");
        PrintValues(myArray, ' ');
        
        // 使用 CopyTo 方法将哈希表项复制到索引 = 6 处的数组
        Console.WriteLine("复制哈希表项键后的新数组:");
        mySourceHT.Keys.CopyTo(myArray, 6);
        
        // 显示数组值
        PrintValues(myArray, ' ');
        
        // 使用 CopyTo 方法将哈希表项值复制到索引处的数组
        //= 6
        Console.WriteLine("复制值后,从索引 6 开始:");
        mySourceHT.Values.CopyTo(myArray, 6);
        
        // 显示数组值
        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 方法将哈希表的元素复制到从 index = 6 开始的数组中。在此程序中,首先,我们仅复制哈希表元素的键,然后复制值。输出显示数组的所有状态,如初始数组、复制哈希表元素后的数组等。

输出

程序的输出如下所示。

初始数组:
   She sells sea shells on the sea shore   
复制哈希表项键后的新数组:
   She sells sea shells on the A B     
复制值后,从索引 6 开始:
   She sells sea shells on the FirstValue SecondValue 

上面的输出显示了初始数组,然后显示了复制哈希表键和哈希表值后的数组。

让我们看另一个示例来清楚地了解 CopyTo 方法。

示例

该程序与之前的程序类似。我们在这里更改了哈希表。此外,我们对 CopyTo 方法使用了一个空数组。完整的程序如下所示。

using System;
using System.Collections;
class myHashTable {
   public static void Main() {
        // 创建一个名为 phonetics 的 Hashtable
        Hashtable phonetics = new Hashtable();
        
        // 在 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");
        
        //打印 hahshtable 集合
        Console.WriteLine("Hashtable items:");
        foreach(DictionaryEntry entry in phonetics){
        Console.WriteLine("{0} and {1} ", entry.Key, entry.Value);
        }
        
        // 创建一个名为 myArr 的一维数组
        DictionaryEntry[] myArr = new DictionaryEntry[phonetics.Count];
        
        // 使用 CopyTo 方法将 Hashtable 条目复制到数组
        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 方法指定 index=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 方法会用哈希表元素覆盖数组元素(如果有)。


相关文章