C# 听说过ifloop;)吗@Quantic:是的,我犯了一个错误,打算添加东西.Value、那.Key等。我只是使用东西和那作为临时占位符,以快速获得我想要的结构。很抱歉造成混淆,我已经编辑了代码@Owain Williams:我希望在末尾添加另一个方法,一
C# 听说过ifloop;)吗@Quantic:是的,我犯了一个错误,打算添加东西.Value、那.Key等。我只是使用东西和那作为临时占位符,以快速获得我想要的结构。很抱歉造成混淆,我已经编辑了代码@Owain Williams:我希望在末尾添加另一个方法,一,c#,loops,dictionary,tuples,C#,Loops,Dictionary,Tuples,听说过ifloop;)吗@Quantic:是的,我犯了一个错误,打算添加东西.Value、那.Key等。我只是使用东西和那作为临时占位符,以快速获得我想要的结构。很抱歉造成混淆,我已经编辑了代码@Owain Williams:我希望在末尾添加另一个方法,一次只提取一个元组,这样我就不需要处理数组了……这么说,我可能不需要返回任何内容。您的代码无法编译,请修复。我假设您希望迭代地址簿和用户和管理器列表,而不是迭代每个的值和键,并且如果(thing.Value==that.Key),您希望执行,但我
听说过
if
loop;)吗@Quantic:是的,我犯了一个错误,打算添加东西.Value、那.Key等。我只是使用东西
和那
作为临时占位符,以快速获得我想要的结构。很抱歉造成混淆,我已经编辑了代码@Owain Williams:我希望在末尾添加另一个方法,一次只提取一个元组,这样我就不需要处理数组了……这么说,我可能不需要返回任何内容。您的代码无法编译,请修复。我假设您希望迭代地址簿
和用户和管理器列表
,而不是迭代每个的值
和键
,并且如果(thing.Value==that.Key),您希望执行,但我不确定。此外,尝试使用比thing
和更好的变量名。您只需将通讯簿加入到UsersandManager列表中,然后在结果选择器中选择元组,或者返回一个只有一组值的元组,我认为您需要返回一个IEnumerable
,基本上是一个元组数组。您可能还想看看Linq,它可以非常简洁地枚举您的数据并返回您想要的。嗯,我从来没有听说过if
loop;)@Quantic:是的,我犯了一个错误,打算添加东西.Value、那.Key等。我只是使用东西
和那
作为临时占位符,以快速获得我想要的结构。很抱歉造成混淆,我已经编辑了代码@Owain Williams:我希望在末尾添加另一个方法,一次只提取一个元组,这样我就不需要处理数组了……这么说,我可能不需要返回任何东西。我不熟悉加入字典-使用这种方法,我会将这部分插入两个foreach
循环中吗?这就是它的工作原理吗?在var结果中,将是您创建的元组列表,您不再需要foreaches了。我最喜欢这种方法,尽管我最终使用的是对象,而不是字典和元组。谢谢。谢谢。这应该非常有效。我不熟悉加入字典-使用这种方法,我会将这部分粘贴到两个foreach
循环中吗?这就是它的工作原理吗?在var结果中,将是您创建的元组列表,您不再需要foreaches了。我最喜欢这种方法,尽管我最终使用的是对象,而不是字典和元组。谢谢。谢谢。它应该非常有效
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;
}
//Assuming that addressBook value (the users email) is the key for the usersAndManagersList
var results = addressBook.Join(usersAndManagersList, addr => addr.Value, user => user.Key, (a, u) => {
var userName = a.Key;
var userEmail = a.Value;
var managerEmail = u.Value;
return Tuple.Create(userName, userEmail, managerEmail);
}).ToList();
addressBook.Where(a => usersAndManagersList.ContainsKey(a.Value))
.Select(a => Tuple.Create(a.Key, a.Value, usersAndManagersList[a.Value]))
class Program
public static IEnumerable<Tuple<string, string, string> > AllUserInformation(Dictionary<string, string> addressBook, Dictionary<string, string> usersAndManagersList)
{
foreach (var book in addressBook)
{
string managerEmail;
if (usersAndManagersList.TryGetValue(book.Value, out managerEmail))
{
yield return Tuple.Create(book.Key, book.Value, managerEmail);
}
else
{
yield return Tuple.Create(book.Key, book.Value, string.Empty);
}
}
}
static void Main(string[] args)
{
Dictionary<string, string> addressBook = new Dictionary<string, string>();
Dictionary<string, string> usersAndManagersList = new Dictionary<string, string>();
addressBook.Add("Andy", "andy@firm.com");
addressBook.Add("Mary", "mary@firm.com");
usersAndManagersList.Add("andy@firm.com", "jane@firm.com");
foreach (var allInfo in AllUserInformation(addressBook, usersAndManagersList))
{
Console.WriteLine("User: {0}, User's Email: {1}, Manager's Email: {2}", allInfo.Item1, allInfo.Item2, allInfo.Item3);
}
}