2015-01-03 77 views
0

我有字符串的第一个列表:比较两个字符串列表元素顺序

"GENRE", 
"NATIONALITY", 
"PRODUCTION", 
"FIRSTYEAR", 
"LASTYEAR", 
"FILTER" 

我有串的第二列表:

"NATIONALITY" 
"LASTYEAR" 
"FILTER" 

我想在第二次检查元素列表(即使某些元素缺失)与第一个列表的顺序相同。

例子:

"NATIONALITY" 
"LASTYEAR" 
"FILTER" 

必须返回TRUE和

"LASTYEAR" 
"NATIONALITY" 
"FILTER" 

必须返回FALSE,因为 “国籍” 必须是前 “LASTYEAR” 相应到第一列表

我曾尝试索引与每个元素的“IndexOf”,但我不知道如何有效地比较它们。

是一个很好的解决方案,以在这种情况下,使用自定义比较(实现IComparer的)?如果是的话如何?使用Enum来实现这种比较会更好吗?

需要帮助的感谢事先

回答

5

您可以使用您的Intersect列表之间取得交集,然后用SequenceEqual方法来检查该序列是相同的list2

list1.Intersect(list2).SequenceEqual(list2); 
+0

我不确定是否'Enumerable.Intersect'保持元素的顺序。但根据这篇文章,它确实如此:[使用LINQ保留订单](http://stackoverflow.com/a/204777/880990)。 –

1

我开始通过过滤第一个列表,使其只包含包含在第二列表中的项目。

var list1Filtered = list1 
    .Where(x => list2.Contains(x)) 
    .ToList() 

如果你确保所有包含在第二列表中的项目包含在第一个列表,以及和他们在这两个列表中的唯一,你可以将下面的检查

if (list1Filtered.Count != list2.Count) { 
    return false; 
} 

现在很容易作出比较

for (int i = 0; i < list2.Count; i++) { 
    if (list2[i] != list1Filtered[i]) { 
     return false; 
    } 
} 
return true;