2011-06-15 2 views
0

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

@for i in $(LIST_A); do \ 
      for j in $(LIST_B); do\ 
      if [ "$$i" = "$$j" ] ;then\ 
      echo " A match found ";\     
      else\ 
      echo "Not found any corresponding String in LIST_B ";\ 
        fi; \ 
      done\ 
    done; 
+0

Вы только находите пересечение между двумя наборами? Для этого есть намного лучшие решения: http://www.catonmat.net/download/setops.txt – Marcin

ответ

0

не уверены, что язык, что оболочка в вашем вопросе, но вот версия Korn что вы могли бы быть в состоянии использовать ...

#!/bin/ksh 

LIST_A="a b c d e" 
LIST_B="d f g" 

got_match="0" 

for item_A in $LIST_A 
do 
    #echo $item_A 
    for item_B in $LIST_B 
    do 
     #echo $item_A " " $item_B 
     if [ "$item_A" == "$item_B" ] 
     then 
      echo "matched " $item_A 
      got_match="1" 
      break 2; 
     fi 
    done 
done 

if [ "$got_match" == "0" ] 
then 
    echo "no match" 
fi 

«обкатки 2» выходит из обеих петель (предполагая, что это то, что вы хотите)

»... чтобы сделать более удобным для чтения .. . ", возможно, стиль t повесят, но мои предложения являются:

  1. использовать осмысленные имена, а не I и J
  2. остерегайтесь несколько операторов в одной строке (не использовать;)
  3. отступа правильно
  4. комментарий, указывающий на намерение, если это не очевидно

Другое предложение: предоставить рабочую версию/фрагмент кода в будущих вопросах, чтобы другие могли протестировать и указать, на каком языке это.

Смежные вопросы