【发布时间】:2015-09-09 07:46:38
【问题描述】:
我有一个看起来像这样的方法:
GetDrawing(Dictionary<string, List<string>> AllDrawings, Dictionary<string, bool> ImportData, string[] ItemsToCompare)
首先,该方法创建一个新的List<string>,其中包含ImportData<string, bool> 中具有true 值的所有项目,并且可以在string[] ItemsToCompare 中找到
其次,我想将新的List<string> 与来自AllDrawings<string, List<string>> 的列表进行比较。该方法最终应该返回一个字符串,其中包含两个列表匹配的AllDrawings<string>, List<String>> 中的键。
我现在花了很多时间试图自己解决这个问题,并尝试了我在 Stackoverflow 上找到的类似问题的所有答案,但没有运气。
下面是我的方法的完整代码。如上所述,我尝试了很多不同的方法来比较列表,但下面的方法是最新的尝试。
public static string GetDrawing(Dictionary<string, List<string>> AllDrawings, Dictionary<string, bool> ImportData, string[] ItemsToCompare)
{
string FinalDrawing = "";
try
{
List<string> AllCorrect = new List<string>();
foreach (var item in ImportData)
{
if (item.Value == true && ItemsToCompare.Contains(item.Key))
AllCorrect.Add(item.Key);
}
AllCorrect.Sort();
foreach (var DrawItem in AllDrawings)
{
DrawItem.Value.Sort();
var match = AllCorrect.SequenceEqual(DrawItem.Value);
if (match == true)
{
FinalDrawing = DrawItem.Key;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return FinalDrawing;
}
我的问题是var match = AllCorrect.SequenceEqual(DrawItem.Value); 的返回值是false,因此永远不会设置FinalDrawing。
非常感谢所有答案。 提前致谢!
【问题讨论】:
-
"该方法应该创建一个新的 List
" 但您的示例方法返回string- 它是什么? -
@Jamiec 抱歉,这具有误导性。现在已经编辑了。返回类型并不那么重要,因为我在比较列表方面需要帮助,但您绝对正确,我的问题应该是一致的。
-
您的
AllCorrect看起来不错。此外,对它进行排序并排序DrawItem.Value和SequenceEquals看起来不错(假设没有小写/大写不匹配)(尽管我只是阅读它,没有尝试运行)。那么,您对所有这些实际上有什么问题? -
作为注释,如果一个方法做了两件事,那就是一对多。把它分开,然后从那里走。测试较小的人是否按照您期望的那样做。从那里继续。
-
Olivier - 你检查过这些字符串的内容了吗?也许他们有点不同。你能添加一些输入数据的样本吗?尤其是一两个
imported和一些你希望与他们匹配的alldrawings