繁体   English   中英

快速搜索巨大字符串中的多个部分字符串

[英]Swiftly search for multiple partial strings in a huge string

我需要检查字符串的所有部分是否都像

A=1&AW=43&KO=96&R=7&WW=15&ZJ=80

像这样的大字符串:

A=1&AG=77&AW=43&.....&KF=11&KO=96&.....&QW=55&R=7&....&WV=1&WW=15&....ZJ=80&

我的代码在上拆分了第一个字符串,并使用Contains 但是持续时间太长,因为大字符串最多可包含800000个字符。

有没有更好/更快的方法呢?

public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static SqlInt32 EquipmentCompare(SqlString equip, SqlString comp)         
    {
        SqlInt32 result = 1;

        if (comp.IsNull)
        {
            result = 1;
        }
        else
        {
            string equipment = "&" + equip.ToString();
            string compString = comp.ToString() + "! ";

            while (compString.Length > 1)
            {
                string sub = compString.Substring(0, compString.IndexOf("!"));
                compString = compString.Substring(compString.IndexOf("!")+1);
                string[] elements = sub.Split('&');
                foreach (string i in elements)
                {
                    if (i.StartsWith("~"))
                    {
                        if (equipment.Contains("&" + i.Substring(1) + "&"))
                        {
                            result = 0;
                            break;
                        }
                    }
                    else if (!equipment.Contains("&" + i + "&"))
                    {
                        result = 0;
                        break;
                    }
                    else
                    {
                        result = 1;
                        continue;
                    }
                }           
                if (result == 1)
                {
                    break;
                }
            }
        }
        return result;         
    }
}

我认为您可以通过使用HashSet来加快代码的速度。 尝试这个:

var str1 = "A=1&AW=43&KO=96&R=7&WW=15&ZJ=80";
var str2 = "A=1&AG=77&AW=43&.....&KF=11&KO=96&.....&QW=55&R=7&....&WV=1&WW=15&....ZJ=80&";

var largeStringSet = new HashSet<string>(str2.Split('&'));
var allPartsIncluded = str1.Split('&').All(s => largeStringSet.Contains(s));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM