哈希表是根据键的哈希码排列的键值对的非通用集合。哈希表用于创建使用哈希表进行存储的集合。哈希表通过计算每个键的哈希码并将其存储在内部篮子中来优化查找。当我们从哈希表中访问特定值时,该哈希码与指定的键相匹配。
此哈希表集合在 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() 过滤器对数组进行排序。我们还可以将哈希表转换为数组或数组列表并对其进行处理。
以上是如何获取哈希表元素作为排序数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

C 学习者和开发者可以从StackOverflow、Reddit的r/cpp社区、Coursera和edX的课程、GitHub上的开源项目、专业咨询服务以及CppCon等会议中获得资源和支持。1.StackOverflow提供技术问题的解答;2.Reddit的r/cpp社区分享最新资讯;3.Coursera和edX提供正式的C 课程;4.GitHub上的开源项目如LLVM和Boost提升技能;5.专业咨询服务如JetBrains和Perforce提供技术支持;6.CppCon等会议有助于职业

C#适合需要高开发效率和跨平台支持的项目,而C 适用于需要高性能和底层控制的应用。1)C#简化开发,提供垃圾回收和丰富类库,适合企业级应用。2)C 允许直接内存操作,适用于游戏开发和高性能计算。

C 持续使用的理由包括其高性能、广泛应用和不断演进的特性。1)高效性能:通过直接操作内存和硬件,C 在系统编程和高性能计算中表现出色。2)广泛应用:在游戏开发、嵌入式系统等领域大放异彩。3)不断演进:自1983年发布以来,C 持续增加新特性,保持其竞争力。

C 和XML的未来发展趋势分别为:1)C 将通过C 20和C 23标准引入模块、概念和协程等新特性,提升编程效率和安全性;2)XML将继续在数据交换和配置文件中占据重要地位,但会面临JSON和YAML的挑战,并朝着更简洁和易解析的方向发展,如XMLSchema1.1和XPath3.1的改进。

现代C 设计模式利用C 11及以后的新特性实现,帮助构建更灵活、高效的软件。1)使用lambda表达式和std::function简化观察者模式。2)通过移动语义和完美转发优化性能。3)智能指针确保类型安全和资源管理。

C 多线程和并发编程的核心概念包括线程的创建与管理、同步与互斥、条件变量、线程池、异步编程、常见错误与调试技巧以及性能优化与最佳实践。1)创建线程使用std::thread类,示例展示了如何创建并等待线程完成。2)同步与互斥使用std::mutex和std::lock_guard保护共享资源,避免数据竞争。3)条件变量通过std::condition_variable实现线程间的通信和同步。4)线程池示例展示了如何使用ThreadPool类并行处理任务,提高效率。5)异步编程使用std::as

C 的内存管理、指针和模板是核心特性。1.内存管理通过new和delete手动分配和释放内存,需注意堆和栈的区别。2.指针允许直接操作内存地址,使用需谨慎,智能指针可简化管理。3.模板实现泛型编程,提高代码重用性和灵活性,需理解类型推导和特化。

C 适合系统编程和硬件交互,因为它提供了接近硬件的控制能力和面向对象编程的强大特性。1)C 通过指针、内存管理和位操作等低级特性,实现高效的系统级操作。2)硬件交互通过设备驱动程序实现,C 可以编写这些驱动程序,处理与硬件设备的通信。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

禅工作室 13.0.1
功能强大的PHP集成开发环境

WebStorm Mac版
好用的JavaScript开发工具