我有两个字符串列表,我需要进行比较并至少验证一个位置是否相同。 有人能帮助我吗?
List<string> listA = new List<string>();
listA.Add("b");
listA.Add("c");
listA.Add("a");
List<string> listB = new List<string>();
listB.Add("h");
listB.Add("b");
listB.Add("d");
预期产出:
b = h false
b = b true (break)
b = d false
答案 0 :(得分:6)
你应该使用LINQ:
if (listA.Intersect(listB).Any())
{
//do smth;
}
答案 1 :(得分:1)
鉴于列表大小相同,有些函数/方法如下:
for (int index = 0; index < listA.Count; index++) {
if (listA[index] == listB[index]) {
return true;
}
}
应该工作。
如果列表大小不同,您可以执行类似的操作。
int smallListCount = listA.Count;
if (smallListCount > listB.Count) {
smallListCount = listB.Count;
}
for (int index = 0; index < smallListCount; index++) { /*... codeblah*/ }
这将确保它只会循环使用尽可能多的元素,因为可以在最小的列表中进行比较。
的Erp!如果你不关心索引的顺序那么......
你需要一些可以接受任何输入的函数/方法,然后迭代listB以查看是否存在匹配,返回true ...如果好......它找到匹配。 然后,您需要输入listA的值,并存储每个元素的结果。
private bool CheckListForItem(List<string> listToCheck, string itemToCheckFor) {
foreach(string item in listToCheck) {
if (item == itemToCheckFor) {
return true;
}
}
return false;
}
然后可以像:
一样使用bool[] results = new results[listA.Count];
for(int index = 0; index < listA.Count; index++) {
results[index] = CheckListForItem(listB, listA[index]);
}
获取每个项目的结果。
请注意,这将具有O(n)的复杂性,我假设LINQ更快。但是,嘿,这暴露了潜在的实施!有点。
答案 2 :(得分:0)
尝试使用 LINQ扩展方法,该方法仅从第一个列表中获取第二个
中不存在的项目List<string> resultList = listA.Except(listB).ToList();
答案 3 :(得分:0)
如果您不熟悉Linq,那么这些内容完全符合您的要求并且不会使用Linq。 我们扩展一个List类并向其添加CompareLists方法,然后调用它以查看两个列表中的任何值是否相同。
public static class Extensions
{
public static bool CompareLists(this List<string> listA, List<string> listB)
{
foreach (string s in listA)
{
foreach (string s1 in listB)
{
if (s.Equals(s1))
{
return true;
}
}
}
return false;
}
}
然后像
一样使用它var result = listA.CompareLists(listB);
通过一些调整,你可以让它返回一个或不相等的对象列表。
public static class Extensions
{
public static List<string> CompareLists(this List<string> listA, List<string> listB)
{
List<string> results = new List<string>();
foreach (string s in listA)
{
foreach (string s1 in listB)
{
if (s.Equals(s1))
{
results.Add(s);
}
}
}
return results;
}
}