如何将哈希表转换为数组?
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 方法会用哈希表元素覆盖数组元素(如果有)。

