两个字符串列表之间的比较

时间:2017-11-10 08:08:32

标签: c#

我有两个字符串列表,我需要进行比较并至少验证一个位置是否相同。 有人能帮助我吗?

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

4 个答案:

答案 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;

    }
}