如何使用三个参数制作hashTable
?我想使用hashTable
和dictionary
存储电话号码,姓名和地址。电话号码作为密钥,名称,地址作为其值。但我只能输入两个数据,电话号码和姓名。如何在hashTable
?
Hashtable phoneBook;
public FrmPhoneBook()
{
InitializeComponent();
phoneBook = new Hashtable();
}
public void addNewPhoneBook(string name, string tel, string add)
{
string names = name;
string telp = tel;
string address = add;
if (!phoneBook.ContainsKey(telp))
{
phoneBook.Add(telp, names);
getDetails();
}
}
public void getDetails()
{
lvDetails.Items.Clear();
foreach (DictionaryEntry values in phoneBook)
{
lvDetails.Items.Add(values.Value.ToString());
lvDetails.Items[lvDetails.Items.Count - 1].SubItems.Add(
values.Key.ToString());
}
}
答案 0 :(得分:5)
您可以将密钥作为电话号码,将值作为结构,其中有两个成员,一个是地址,另一个是名称。另外,请考虑转移到字典,因为它是typesafe
struct User
{
public string Name;
public string Address;
}
static void Main(string[] args)
{
Dictionary<string, User> hash = new Dictionary<string, User>();
//To add to the hash
hash.Add( "22255512282" ,
new User(){ Name = "foo" , Address = "Bar" });
//To lookup by key
User user;
if (hash.TryGetValue("22255512282", out user))
{
Console.WriteLine("Found " + user.Name);
}
}
答案 1 :(得分:4)
将您的所有用户数据放入一个类:
public class User
{
public string Name { get; set; }
public string Address { get; set; }
public string PhoneNumber { get; set; }
}
然后处理如下:
Dictionary<string, User> reverseLookUp = new Dictionary<string, User>();
User user;
// Fill dictionary
user = new User { Name = "John", Address = "Baker Street", PhoneNumber = "012345" };
reverseLookUp.Add(user.PhoneNumber, user);
user = new User { Name = "Sue", Address = "Wall Street", PhoneNumber = "333777" };
reverseLookUp.Add(user.PhoneNumber, user);
// Search a user
string phoneNumber = "012345";
if (reverseLookUp.TryGetValue(phoneNumber, out user)) {
Console.WriteLine("{0}, {1}, phone {2}", user.Name, user.Address, user.PhoneNumber);
} else {
Console.WriteLine("User with phone number {0} not found!", phoneNumber);
}
// List all users
foreach (User u in reverseLookUp.Values) {
Console.WriteLine("{0}, {1}, phone {2}", u.Name, u.Address, u.PhoneNumber);
}
您还可以为此目的创建专门的字典:
public class PhoneDict : Dictionary<string, User>
{
public void Add(User user)
{
Add(user.PhoneNumber, user);
}
}
然后按如下方式添加用户:
PhoneDict phoneDict = new PhoneDict();
User user;
// Fill dictionary
user = new User { Name = "John", Address = "Baker Street", PhoneNumber = "012345" };
phoneDict.Add(user);
user = new User { Name = "Sue", Address = "Wall Street", PhoneNumber = "333777" };
phoneDict.Add(user);
答案 2 :(得分:1)
如果您使用的是.NET 4.0及以上版本,则可以使用Tuple
Dictionary<string, Tuple<string, string>> myHash = new Dictionary<string, Tuple<string, string>>();
来自MSDN
元组是一种具有特定数量和元素序列的数据结构。元组的一个示例是具有三个元素(称为3元组或三元组)的数据结构,用于存储标识符,例如第一元素中的人名,第二元素中的年份以及人的收入。那一年的第三个元素。
以下是您可以使用的代码示例
class Program
{
static void Main(string[] args)
{
Dictionary<string, Tuple<string, string>> myHash = new Dictionary<string, Tuple<string, string>>();
//Test with 10 records
//Create 10 records
Enumerable.Range(1, 10).All(a => { myHash.Add("12345" + a.ToString(), new Tuple<string, string>("user" + a.ToString(), "user" + a.ToString() + "address")); return true; });
//Display 10 records
myHash.Keys.All(a => { Console.WriteLine(string.Format("Key/Phone = {0} name = {1} address {2}", a, myHash[a].Item1, myHash[a].Item2)); return true; });
Console.ReadLine();
}
}
进一步的元组通常以四种方式使用:
表示一组数据。例如,元组可以表示 数据库记录,其组件可以表示各个字段 记录。
提供对数据集的轻松访问和操作。
从方法返回多个值而不使用out参数(在C#中)或ByRef参数(在Visual Basic中)。
通过单个参数将多个值传递给方法。
它使用工厂模式来实例化相对结构