2015-06-02 2 views
1

Мне нужно подсчитать количество пробелов слова в массиве из поля «MytextField». Массив состоит из более чем 9000 строк, а текст в поле «MytextField» состоит из более чем 10000 строк. Я использую следующий код, и он отлично работает, но нужно столько времени.Как считать наличие в livecode?

put the number of lines of (the keys of myArray) into myArrayL 
    repeat with i = 0 to myArrayL 
     put myArray[i] into k 
     split k by colon 
     put k[1] into searchStr 
     put k[2] into replaceStr 
     repeat for each line iword in Tex 
     if iword contains searchStr then 
      add 1 to tmp 
      put tmp & "     " & searchStr & cr into sam 
     end if 
     --delete word iword of Tex 
     if iword contains replaceStr then 
      add 1 to tmp1 
      put tmp1 & "     " & replaceStr & cr into sam1 
     end if 
     --delete word iword of Tex 
     end repeat 
     put sam after slu 
     put 0 into tmp 
     put "" into sam 
     put sam1 after slu1 
     put 0 into tmp1 
     put "" into sam1 
    end repeat 
answer slu1 
answer slu 

Можно ли уменьшить расход времени? Как изменить этот код на более высокую скорость

ответ

1

Попробуйте использовать смещение, которые должна быть быстрее, чем изучение каждого слова:

put fld "MytextField" into tText 
set the itemdel to colon 
repeat for each element e in myArrayL 
    put item 1 of e into searchStr 
    put 0 into tSkip 
    repeat 
    get wordOffset(searchStr,tText,tSkip) 
    if it = 0 then exit repeat 
    add it to tSkip 
    add 1 to tCountArray[searchStr] 
    end repeat 
end repeat 

Это подсчитывает слова поиска и помещает отсчеты в массив. Вы можете немного изменить его и запустить его снова, если вам тоже нужно пересчитать слова замены. Не считайте слова поиска и слова замены в том же цикле повтора, вы получите неправильные результаты. Я не знаю, будет ли это намного быстрее, чем исходный скрипт, потому что цикл повторения должен запускаться дважды, если вы хотите как поиск, так и замещение слов.

После того, как массивы сделаны, вы можете использовать команду combine, чтобы быстро показать подсчеты.

0

Попробуйте вместо этого построить repeat for each element. Это обычно быстрее в таких ситуациях, как repeat with i = x to y.

repeat for each element thisElement in myArray 
    # your loop logic here 
end repeat 
Смежные вопросы