C#中如何将Hashtable转换为数组
C#中的hashtable集合是一个以键值对表示的非通用的项目集合。每个键都是一个唯一的、非空的元素。另一方面,值可以是重复的和/或空的。
C#中的Hashtable类代表hashtable集合。这个类提供了相关的方法来创建对象,改变集合中的项目,等等。
在C#中,hashtable集合可以表示为一个数组或ArrayList。在这篇文章中,让我们讨论如何将hashtable集合转换为数组。
如何将Hashtable转换为数组
为了将hashtable转换成一个数组,C# Hashtable类提供了一个名为 “CopyTo “的方法。CopyTo方法将hashtable项目复制到一个数组中’。
CopyTo方法的原型在下面给出。
语法
public virtual void CopyTo (Array array, int arrayIndex);
参数
- array – 来自hashtable的DictionaryEntry对象的目的地。这是一个一维数组,以零为基础进行索引。
-
arrayIndex – 一个整数(Int32)值,表示目标数组的零基索引。代表复制开始的位置。
实现
CopyTo(Array, Int32)
描述
Hashtable.CopyTo(Array, Int32)方法将Hashtable的元素复制到指定索引的一维数组实例中。
Namespace
系统.集合
异常
- ArgumentNullException – 当目标数组为空时,会抛出这个异常。
-
ArgumentOutOfRangeException – 如果指定的arrayIndex小于0,则抛出。
-
ArgumentException – 如果数组是多维的,则抛出该异常。或者要复制的hashtable元素大于目标数组的可用空间。
-
InvalidCastException – 这个异常在类型不匹配时被抛出,即hashtable类型不能自动投射到目标数组类型。从上面的原型中,我们知道CopyTo方法是将hashtable元素复制到指定arrayIndex的数组中。指定数组索引处的数组元素将被hashtable元素所覆盖。
现在让我们实现一个编程实例来演示CopyTo方法。
在这里,我们使用的是以下的哈希图。
Key | value |
---|---|
A | FirstValue |
B | SecondValue |
上述hashtable元素将被转换为一个数组。该数组定义如下。
Index | value |
---|---|
0 | She |
1 | sells |
2 | sea |
3 | shells |
4 | on |
5 | the |
6 | sea |
7 | shore |
示例
现在我们将使用CopyTo方法将hashtable元素从index = 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();
}
}
在这个程序中,我们首先声明并定义了hashtable。然后我们声明并定义了数组。接下来,使用CopyTo方法将hashtable的元素从index = 6开始复制到数组中。 在这个程序中,首先,我们只复制hashtable元素的键,然后再复制值。输出显示了数组的所有状态,如初始数组,复制hashtable元素后的数组,等等。
输出
该程序的输出结果如下所示。
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
上面的输出显示了初始数组,然后显示了复制了hashtable键和hashtable值之后的数组。
让我们看看另一个例子来清楚地了解CopyTo方法。
示例
该程序与先前的程序相似。我们在这里改变了hashtable。另外,我们在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方法将hashtable的所有元素复制到一个空数组中。因为数组是空的,所以这些元素是从数组的开始复制的。因此我们为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
在输出中,我们首先显示hashtable,然后显示数组的内容。为了说明问题,改变了hashtable和数组中元素的表现形式。
在这篇文章中,我们演示了使用C#的Hashtable类的CopyTo方法来将hashtable项转换为数组。CopyTo方法接受数组和索引作为参数,所以我们可以在数组的任何部分复制hashtable元素,而不一定要从头开始。为了在数组的开头复制hashtable元素,我们指定索引为0。根据指定的数组索引,CopyTo方法覆盖数组元素,如果有的话,用hashtable元素覆盖。