比较字符串是否相等

Dal*_*ons 3 c# string compare string-comparison

我想比较一组字符串并返回相等的部分,直到出现不相等的部分.(并删除traling空格).

例:

List<string> strList = new List<string>
{
    "string xyz stop",
    "string abc stop",
    "string   qrt stop"
};

string result = GetEqualName(strList); // This should return "string"
Run Code Online (Sandbox Code Playgroud)

我做了以下方法

string GetEqualName(IEnumerable<string> strList)
{
    string outString = "";
    bool firstTime = true;
    foreach (var subString in strList)
    {
        if (firstTime)
        {
            outString = subString;
            firstTime = false;
        }
        else
        {
            string stringBuilder = "";
            for (int i = 0; i < outString.Count(); i++)
            {
                if (outString[i] == subString[i])
                    stringBuilder = stringBuilder + outString[i];
                else
                    break;
            }
            outString = stringBuilder;
        }
    }
    outString = outString.TrimEnd(' '); // Remove traling whitespace
    return outString;
}
Run Code Online (Sandbox Code Playgroud)

我觉得这是可以在几行中完成的事情,而且我过度了.你们有什么建议吗?

Ser*_*rvy 6

您可以将Zip两个字符串放在一起,取相同的对,然后创建这些字符的字符串.

public static string LargestCommonPrefix(string first, string second)
{
    return new string(first.Zip(second, Tuple.Create)
        .TakeWhile(pair => pair.Item1 == pair.Item2)
        .Select(pair => pair.Item1)
        .ToArray());
}
Run Code Online (Sandbox Code Playgroud)

一旦解决了组合两个字符串的问题,就可以轻松地将其应用于字符串序列:

public static string LargestCommonPrefix(IEnumerable<string> strings)
{
    return strings.Aggregate(LargestCommonPrefix);
}
Run Code Online (Sandbox Code Playgroud)