哈希表是根据键的哈希码排列的键值对的非通用集合。哈希表用于创建使用哈希表进行存储的集合。哈希表通过计算每个键的哈希码并将其存储在内部篮子中来优化查找。当我们从哈希表中访问特定值时,该哈希码与指定的键相匹配。
此哈希表集合在 C# 的 System.Collections 命名空间中定义。表示哈希表集合的类是“Hashtable”类。此类提供构造函数、方法和属性来操作哈希表集合。默认情况下,哈希表集合是未排序的。如果我们想要一个排序的哈希表集合,我们需要将其表示为 Array 或 ArrayList 的形式,并对元素进行排序。
在本文中,我们将了解如何获取排序数组形式的哈希表元素。那么让我们开始吧。
获取哈希表元素作为排序数组
我们知道,默认情况下,哈希表集合是未排序的。对哈希表集合进行排序可能非常困难,因为我们根据键创建哈希表集合,然后向每个键添加值。
如果我们想要对哈希表集合进行排序,我们必须根据键或值对其进行排序。 Hashtable 类中没有直接的方法对哈希表集合进行排序。所以我们必须求助于其他方法。
其中一种方法是将哈希表元素(键或值)作为排序数组获取。为此,我们将遵循下面列出的步骤。
-
创建哈希表对象
-
用键值对填充此对象
-
创建一个字符串类型的数组,长度=哈希表的长度
-
根据键遍历哈希表,并用每个键填充数组
-
对生成的数组进行排序
示例
我们使用 C# 编写了此方法,如下所示。
using System;
using System.Collections;
class Program {
public static void Main() {
// Create a Hashtable
Hashtable langCodes = new Hashtable();
// Add elements to the Hashtable
langCodes.Add("C++", "CPlusPlus");
langCodes.Add("C#", "CSharp");
langCodes.Add("Java", "Java");
langCodes.Add("PL", "Perl");
langCodes.Add("PG", "Prolog");
int k = langCodes.Count;
// create array of length = hashtable length
string[] sortedArray = new string[k];
// Retrieve key values in Array
int i = 0;
Console.WriteLine("Hashtable langCodes Contents:");
foreach (DictionaryEntry de in langCodes) {
Console.WriteLine("{0} ({1}) ", de.Key, de.Value);
sortedArray[i] = de.Key.ToString();
i++;
}
Array.Sort(sortedArray);
Console.WriteLine("Contents of sorted array based on Hashtable keys:");
foreach (var item in sortedArray) {
Console.WriteLine(item);
}
}
}
登录后复制
在此程序中,我们定义一个 Hashtable 对象 langCodes 并填充它
与键值对。然后我们检索哈希表的长度并使用
这个长度声明一个数组“sortedArray”。接下来我们遍历
langCodes 哈希表并使用键填充排序后的数组对象
langCodes 哈希表的值。
然后我们使用过滤器 Array.Sort(sortedArray) 对数组进行排序并打印
这个排序数组。
输出
程序的输出如下。
Hashtable langCodes Contents:
PG (Prolog)
Java (Java)
C# (CSharp)
PL (Perl)
C++ (CPlusPlus)
Contents of sorted array based on Hashtable keys:
C#
C++
Java
PG
PL
登录后复制
从输出中,我们可以看到哈希表键元素被检索为元素的排序数组。
现在我们再举一个例子。我们使用上面讨论的相同方法。唯一的区别是在此示例中,我们将使用值而不是哈希表中的键填充数组。
示例
让我们看看完整的 C# 程序。
using System;
using System.Collections;
class Program {
public static void Main() {
// Create a Hashtable
Hashtable numberNames = new Hashtable();
// Add elements to the Hashtable
numberNames.Add(12, "Twelve");
numberNames.Add(2, "Two");
numberNames.Add(65, "Sixty Five");
numberNames.Add(15, "Fifteen");
numberNames.Add(18, "Eighteen");
int k = numberNames.Count;
//create array of length = hashtable length
string[] sortedArray = new string[k];
// Retrieve hashtable values in array.
int i = 0;
Console.WriteLine("Hashtable langCodes Contents:");
foreach (DictionaryEntry de in numberNames) {
Console.WriteLine("{0} ({1}) ", de.Key, de.Value);
sortedArray[i] = de.Value.ToString();
i++;
}
Array.Sort(sortedArray);
Console.WriteLine("Contents of sorted array based on Hashtable values:");
foreach (var item in sortedArray) {
Console.WriteLine(item);
}
}
}
登录后复制
该程序有一个哈希表对象,numberNames。我们用数字及其相应的数字名称填充它。通过遍历哈希表,我们用值填充排序数组。然后我们使用 Array.Sort() 过滤器对数组进行排序并打印排序后的数组。
输出
程序的输出如下所示。
Hashtable langCodes Contents:
18 (Eighteen)
12 (Twelve)
65 (Sixty Five)
2 (Two)
15 (Fifteen)
Contents of sorted array based on Hashtable values:
Eighteen
Fifteen
Sixty Five
Twelve
Two
登录后复制
从输出中,我们可以看到数组的内容(哈希表中的值)确实是按字母顺序排序的。我们可以轻松比较哈希表和排序数组的输出。在哈希表中,输出未排序。键值对随机显示。在数组中时,输出已排序。
虽然对哈希表元素进行排序很困难,但我们可以通过将哈希表元素表示为数组来进行排序。但同时对键和值进行排序是不可能的。我们可以检索数组中的所有键或数组中的所有值。然后我们可以使用 Array.Sort() 过滤器对数组进行排序。我们还可以将哈希表转换为数组或数组列表并对其进行处理。
以上就是如何获取哈希表元素作为排序数组?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!