我的课有问题。我需要做点什么,但无法找到解决方案。
每个class1都有一个包含字符串键和class2值的字典。我知道在任何class1中都没有两个字典键匹配。如果给出密钥,我如何在class1的堆栈中找到某个class2?
答案 0 :(得分:1)
假设这些类:
public class Class1
{
public Dictionary<string, Class2> ClassTwos { get; private set;}
public Class1()
{
ClassTwos = new Dictionary<string, Class2>();
}
}
public class Class2 {}
如果您有多个Class1
个实例,每个实例都有自己的Dictionary<string,Class2>
,那么您无法保证相同的密钥不会出现在多个词典中。您只能确定它不会在同一个词典中出现两次。因此,如果您正在查找某个密钥的Class1
集合,则可能会获得多个结果。
假设您只想要第一个结果:
(有很多方法可以使用LINQ,但这更清楚地说明了发生了什么。)
Class2 FindClassTwoByKey(Stack<Class1> stack, string key)
{
foreach (var class1 in stack)
{
if (class1.ClassTwos.ContainsKey(key))
{
// We found a match. Return it. We're done.
return class1.ClassTwos[key];
}
}
return null;
}
或者如果您想要返回所有匹配项:
List<Class2> FindClassTwosByKey(Stack<Class1> stack, string key)
{
var result = new List<Class2>();
foreach (var class1 in stack)
{
if (class1.ClassTwos.ContainsKey(key))
{
result.Add(class1.ClassTwos[key]);
}
}
return result;
}
或者如果你想使用LINQ来做这件事,因为它更难读,但很有趣,
Class2 FindClassTwoByKey(Stack<Class1> stack, string key)
{
return stack.Where(s => s.ClassTwos.ContainsKey(key))
.Select(s => s.ClassTwos[key])
.FirstOrDefault();
}
List<Class2> FindClassTwosByKey(Stack<Class1> stack, string key)
{
return stack.Where(s => s.ClassTwos.ContainsKey(key))
.Select(s => s.ClassTwos[key])
.ToList();
}
答案 1 :(得分:0)
您必须迭代字典的值。
字典O(1)用于查找密钥。但是他们是寻找价值的O(N)。
也许词典不适合您的问题。