【发布时间】:2016-08-23 13:50:28
【问题描述】:
我读过一些类似的帖子,但很多人只是询问如何将字典插入元组,反之亦然。我的问题是我有两个单独的字典,我想用它们来填充一个新的元组。
这两个字典有一些共同的信息,就是用户的email。 addressBook 字典包含用户的姓名和用户的电子邮件。 usersAndManagersList 保存用户的电子邮件和经理的电子邮件。我希望将两者匹配起来,然后将所有信息位放入一个元组中,以便轻松传递它而不是两个字典。
public static Tuple<string, string, string> allUserInformation(Dictionary<string, string> addressBook, Dictionary<string, string> usersAndManagersList)
{
Tuple<string, string, string> allUserInfo;
foreach (var thing in addressBook)
{
foreach (var that in usersAndManagersList)
{
if (thing.Value == that.Key)
{
var userName = thing.Key;
var userEmail = thing.Value;
var managerEmail = that.Value;
Console.WriteLine("User: {0}, User's Email: {1}, Manager's Email: {2}", userName, userEmail, managerEmail);
allUserInfo = Tuple.Create(userName, userEmail, managerEmail);
}
}
}
return allUserInfo;
}
addressBook 中的值和usersAndManagersList 中的键都是用户的电子邮件。我试图遍历所有内容,如果一个的值与另一个的键匹配,则用户的电子邮件、用户名和经理的电子邮件将用于创建一个元组,然后在循环中重新开始。
主要难题:如果我应该使用 while 或 if 循环,我会遇到困难。我担心范围以及我应该在哪里 return 元组。我得到的一个错误是我正在返回一个空/未分配的元组,我理解为什么根据我返回它的位置,但我不知道如何修复它。如何使用正确的循环等创建这个元组?提前谢谢你。
【问题讨论】:
-
您的代码无法编译,请修复。我假设您想要遍历
addressBook和usersAndManagersList,而不是遍历Values和Keys,并且您想要执行if (thing.Value == that.Key),但我不确定。此外,尝试使用比thing和that更好的变量名称。 -
你应该把通讯录加入到 usersAndManagersList 中,然后在结果选择器中选择元组
-
你返回一个
Tuple<string, string, string>,它只有一组值,我认为你需要返回一个IEnumerable<Tuple<string, string, string>>,基本上是一个Tuple的数组。您可能还想查看 Linq,这可以非常简洁地枚举您的数据并返回您想要的内容。 -
呵呵,我从没听说过
if循环;)。 -
@Quantic:是的,我犯了一个错误,打算添加thing.Value,that.Key等。我只是使用
thing和that作为临时占位符来快速得到我想要的结构。对不起,我已经编辑了代码。 @Owain Williams:我希望在最后添加另一种方法,一次只拾取一个元组,所以我不需要处理数组......这么说,我可能不需要返回任何东西。
标签: c# loops dictionary tuples