首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在整个模块中查找单词

在整个模块中查找单词
EN

Stack Overflow用户
提问于 2018-02-16 15:23:55
回答 2查看 68关注 0票数 0

我有一个跳表包含一个模数转换器,先进先出,数模转换器,FIFO等。我想知道这些字是否在整个模块中使用或没有在模块中使用的.if应该返回未使用的字。我有一个程序,但执行时间太长了。请帮我弄一下这个。

代码如下:

代码语言:javascript
复制
Skip Search_In_Entire_Module(Skip List)    
{   
    int sKey = 0    
    Skip sList      = create()    
    string data = ""
    string  objText1
    Object obj 

    for data in List do 
    {
        int var_count = 0
        for obj in m do 
        {
            objText1 = obj."Object Text"
            if objText1!=null then 
            {
                if (isDeleted obj){continue}
                if (table obj)    {continue}
                if (row obj)      {continue}
                if (cell obj)     {continue}        

                Buffer buf = create()
                buf    =   objText1
                int index = 0
                while(true)
                {
                    index = contains(buf, data, index)
                    if(0 <= index)
                    {
                        index += length(data)
                    }
                    else 
                    {
                        var_count++
                        break 
                    }
                }
                delete(buf)
            }
        }
        if (var_count ==0)
        {
            put(sList,sKey,data)
            sKey++
        }
    }
    return sList
}    

Unused_Terminolody_Data = Search_In_Entire_Module(Terminology_Data)
EN

回答 2

Stack Overflow用户

发布于 2018-02-16 23:02:34

我只是想知道:为什么这会出现在while循环中?

代码语言:javascript
复制
            while(true)
            {
                index = contains(buf, data, index)
                if(0 <= index)
                {
                    index += length(data)
                }
                else 
                {
                    var_count++
                    break 
                }
            }

相反,我只会这样做:

代码语言:javascript
复制
index = contains ( buf, data )
if ( index == -1 ) {
     var_count++
}
buf = ""

我也不会一直删除和重新创建缓冲区。在创建对象变量的位置创建缓冲区,然后将其设置为等于"“以清除它,然后在程序结束时删除它。

如果这有帮助,请告诉我!

票数 0
EN

Stack Overflow用户

发布于 2018-02-20 22:36:02

Balthos提出了很好的观点,我认为你还可以做更多的事情。下面是我对你的函数的改编。注意事项:

我实现了Balthos的建议(上面),去掉了‘’循环,并且buffer

  1. 更改了函数签名。考虑到跳过列表是通过引用传递的,并且必须在函数外部创建和删除,从函数中返回它们在语法上是令人困惑的(至少对我来说)。因此,我将两个跳过列表(我们正在查找的术语,未找到的术语)作为函数参数进行传递。请原谅我更改变量名-它帮助我理解了发生了什么事情- quickly.
  2. There's不需要将对象文本放在字符串中-这是相对较慢的,并且消耗内存,直到门退出才会释放。因此,我在前面的函数中将对象文本放在缓冲区中,并对其进行搜索。我的第34行的'if (!null bufObjText)‘等同于您的'objText1!=null’。如果你喜欢,'if (bufObjText != null)‘会做同样的事情。
  3. 条件'if (var_count ==0)’是多余的-我把它的函数移到了前面的' if‘块中(我的第40行)。
  4. 我上移了对已删除、表、行和单元格对象的测试,这样它们就会在我们花时间用对象文本填充缓冲区之前发生-所以只有在必要时才会这样做。

项目2可能不会对性能产生影响,但其他项目会影响性能。唯一的问题是,有多大?

请让我们知道这是否改善了您目前拥有的运行时间。我没有足够多的样本数据来与您的代码进行有意义的比较。

代码语言:javascript
复制
Module modCurrent = current

Skip skUnused_Terminology_Data = create

Skip skSeeking_Terminology_Data = create()

put (skSeeking_Terminology_Data, 0, "SPONG")
put (skSeeking_Terminology_Data, 1, "DoD")


void Search_In_Entire_Module(Skip skTermsSought, skTermsNotFound)
{
    Object obj
    Buffer bufObjText = create()

    int intSkipKey  = 0
    int index       = 0
    string strSkipData = ""

    for strSkipData in skTermsSought do
    {
        int var_count = 0
        bool blFoundTerm = false

        for obj in modCurrent do
        {
            if (isDeleted obj){continue}
            if (table obj)    {continue}
            if (row obj)      {continue}
            if (cell obj)     {continue}

            bufObjText = obj."Object Text"

            if (!null bufObjText) then
            {
                Regexp re = regexp2 strSkipData

                blFoundTerm = search (re, bufObjText, 0)

                if ( blFoundTerm ) {
                    put(skUnused_Terminology_Data, intSkipKey, strSkipData)
                    intSkipKey++
                }
                bufObjText = ""
            }
        }

    delete (bufObjText)
}


Search_In_Entire_Module (skSeeking_Terminology_Data, skUnused_Terminology_Data)

string strNotFound

for strNotFound in skUnused_Terminology_Data do
{
    print strNotFound "\n"
}

delete skUnused_Terminology_Data
delete skSeeking_Terminology_Data
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48821906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档