我正在寻找更好的方法来执行以下操作。
<K, V>
我真的不想使用3种不同的词典,因为using System;
using System.Collections;
Dictionary<int, string> namebyID = new Dictionary<int, string>();
Dictionary<string, int> idbyName = new Dictionary<string, int>();
Dictionary<string, string> valuebyName = new Dictionary<string, string>(); // users favorite dessert
/* Lets store information about "leethaxor" */
namebyID.Add(1234, "leethaxor");
idbyName.Add("leethaxor", 1234);
valuebyName.Add("leethaxor", "cake");
/* use case 1, I'm given an ID and i need the user's favorite dessert*/
if (namebyID.ContainsKey(1234))
{
string username;
namebyID.TryGetValue(1234, out username);
if (valuebyName.ContainsKey(username))
{
string dessert;
valuebyName.TryGetValue(username, out dessert);
Console.Write("ID 1234 has a username of " + username + " and loves " + dessert + "\n");
}
}
/* use case 2, I'm given a username and need to make sure they have a valid ID*/
if (idbyName.ContainsKey("leethaxor"))
{
int id;
idbyName.TryGetValue("leethaxor", out id);
Console.Write("username leethaxor has a valid ID of " + id + "\n");
}
,id
和username
都是相互关联的。哈希value
和key1(id)
一起工作不会起作用,因为我只给出了一个或另一个,而不是两个。
答案 0 :(得分:2)
您应该明确地使用自己的类来保存所有属于一起的信息。依赖于不同的词典是一团糟,而且你将更多的信息放入这些词典中会变得非常复杂和复杂。
因此,在您的情况下,您可以创建一个类,我们称之为Person
。每个Person
都有Id
,UserName
和Value
:
class Person
{
public int Id { get; set; }
public string UserName { get; set; }
public string Value { get; set; }
}
现在创建一个人员列表,例如:
var list = new List<Person> {
new Person { Id = 1234, UserName = "leethaxor", Value = "Cake" },
new Person { Id = 2, UserName = "Berta", Value = "AnotherValue" }
};
现在,您可以使用给定的person
或给定的Id
获取UserName
:
var aPerson = list.FirstOrDefault(x => x.Id = 1234);
或
var aPerson = list.FirstOrDefault(x => x.UserName = "leethaxor");
你应该明确看一下面向对象编程的基础知识,这是关于对象及其行为的。
答案 1 :(得分:1)
为什么不使用课程?另外,使用TryGetValue()而不是ContainsKey()。 What is more efficient: Dictionary TryGetValue or ContainsKey+Item?
public class User
{
public int Id;
public string Name;
public string Value;
}
Dictionary<int, User> userById = new Dictionary<int, User>();