C#中如何将Hashtable转换为数组

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元素覆盖。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程