如何将哈希表转换为数组?
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 方法将覆盖数组元素(如果有)的哈希表元素。
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP