我有两个问题:
Hashtable和Dictionary之间有什么区别?
有没有办法将这些集合中的任何一个保存到磁盘?
答案 0 :(得分:2)
首先,不要使用Hashtable。请改用HashSet。您可以在命名空间System.Collections.Generic中找到它。
什么是哈希地图?
哈希映射(或字典,因为它在C#中调用)是一种数据结构,允许您使用其他类型的输入查找一种类型的数据。基本上,当您向字典添加项目时,您同时指定键和值。然后,当你想在字典中查找值时,只需给它一个键,它就会给你一个与之关联的值。
例如,如果您希望能够通过UPC查找一堆Product对象,则可以将产品添加到Dictionary中,并将Product作为值,将UPC编号作为键。
另一方面,HashSet 不存储键和值对。它只是存储物品。哈希集(或任何集合)确保在向集合中添加项目时,不会出现重复项。
当我在哈希表中添加项目时,我可以将其保存为新文件并还原原始项目吗?
首先,不要使用Hashtable。请改用HashSet
。您可以在命名空间System.Collections.Generic
中找到它。要使用它,您只需像对其他任何集合一样添加项目。
与其他集合一样,HashSet
支持序列化(序列化是指您获取对象并将其转换为字节字符串,因此它可以是保存到文件或通过互联网发送)。这是一个显示哈希集序列化的示例程序:
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace HashSetSerializationTest
{
class Program
{
static void Main(string[] args)
{
var set = new HashSet<int>();
set.Add(5);
set.Add(12);
set.Add(-50006);
Console.WriteLine("Enter the file-path:");
string path = Console.ReadLine();
Serialize(path, set);
HashSet<int> deserializedSet = (HashSet<int>)Deserialize(path);
foreach (int number in deserializedSet)
{
Console.WriteLine($"{number} is in original set: {set.Contains(number)}");
}
Console.ReadLine();
}
static void Serialize(string path, object theObjectToSave)
{
using (Stream stream = File.Create(path))
{
var formatter = new BinaryFormatter();
formatter.Serialize(stream, theObjectToSave);
}
}
static object Deserialize(string path)
{
using (Stream stream = File.OpenRead(path))
{
var formatter = new BinaryFormatter();
return formatter.Deserialize(stream);
}
}
}
}
为了序列化任何内容,您需要包含System.IO
和System.Runtime.Serialization.Formatters.Binary
。