Что нового

Помогите с циклом For in

xoop

Новичок
Сообщения
10
Репутация
0
Версия AutoIt: 3.

Описание:
Необходимо сравнить 2 массива и из первого удалить строки совпадающие со вторым. Использую 2 вложенных for in. Но почему то не работает. Такое ощущене, что даже в цикл не входит. Подскажите пожалуйста, как исправить.


Примечания:
Код:
#Include <Array.au3>
#include <IE.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>

Global $studarray[3] = ['aaa','bbb','ccc']
Global $errarray[3] = ['ss','dfd dfd','ccc']

   For $x  in $studarray
	  For $y In $errarray
			If $studarray[$x] == $errarray[$y] Then
			   _ArrayDisplay($studarray[$x], "Нашли")
			   _ArrayDelete($studarray, $x)
			   $x = $x - 1
			EndIf
	  Next
   Next

_ArrayDisplay($studarray, "После")
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
xoop
В цикле For...In...Next переменная не является счётчиком, а принимает значение самого элемента. Вот, посмотрите что выводится в консоль
Код:
Global $studarray[3] = ['aaa','bbb','ccc']
For $x In $studarray
  ConsoleWrite($x & @CRLF)
Next
 
Автор
X

xoop

Новичок
Сообщения
10
Репутация
0
Спасибо. Поменял на for to.
Выдаёт ошибку в сравнении If $studarray[$x] == $errarray[$y] Then
==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.
Код:
#Include <Array.au3>
#include <IE.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>

Global $studarray[3] = ['aaa','bbb','ccc']
Global $errarray[3] = ['ss','dfd dfd','ccc']

   For $x = 0 to 2
	  For $y = 0 to 2
			If $studarray[$x] == $errarray[$y] Then
			   _ArrayDisplay($studarray[$x], "Нашли")
			   _ArrayDelete($studarray, $x)
			   $x = $x - 1
			EndIf
	  Next
   Next





Добавлено:
Сообщение автоматически объединено:

Решил, спасибо за подсказку
Код:
#Include <Array.au3>
#include <IE.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>

Global $studarray[3] = ['aaa','bbb','ccc']
Global $errarray[3] = ['ss','dfd dfd','ccc']
Global $xnum = 0
Global $ynum = 0

   For $x in $studarray
	  For $y In $errarray
			If $x == $y Then
			   _ArrayDisplay($studarray[$xnum], "Нашли")
			   _ArrayDelete($studarray, $xnum)
			   $x = $x - 1
			EndIf
			$ynum = $ynum +1
	  Next
	  $xnum = $xnum +1
   Next
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
xoop
А если так? ;)
Код:
Global $studarray[3] = ['aaa','bbb','ccc']
Global $errarray[3] = ['aaa','dfd dfd','ccc']




Функция здесь: Ответ #8

Код:
Global $studarray[3] = ['aaa','bbb','ccc']
Global $errarray[3] = ['ss','dfd dfd','ccc']
$a = _ArrayCompare($studarray, $errarray)

#include <Array.au3>
_ArrayDisplay($a)
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Вариант с циклом For...In...Next
Код:
#Include <Array.au3>

Global $studarray[3] = ['aaa','bbb','ccc']
Global $errarray[3]  = ['aaa','ddd','ccc']
Global $i = -1

   For $x In $studarray
      $i += 1
      For $y In $errarray
         If $x == $y Then
            _ArrayDelete($studarray, $i)
            $i -= 1
            ExitLoop
         EndIf
      Next
   Next

_ArrayDisplay($studarray)
 
Верх