字典有两个键和一个值没有散列

时间:2018-01-21 19:25:27

标签: c# dictionary key

我正在寻找更好的方法来执行以下操作。

<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"); } idusername都是相互关联的。哈希valuekey1(id)一起工作不会起作用,因为我只给出了一个或另一个,而不是两个。

2 个答案:

答案 0 :(得分:2)

您应该明确地使用自己的类来保存所有属于一起的信息。依赖于不同的词典是一团糟,而且你将更多的信息放入这些词典中会变得非常复杂和复杂。

因此,在您的情况下,您可以创建一个类,我们称之为Person。每个Person都有IdUserNameValue

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>();