Что нового

Сравнение ячеек массива.

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
24
Добрый день форумчане!
Возник трудно-решаемый вопрос, (поиск по форуму не помог),
Как сравнить две ячейки массива, и преобразовать одну в случае равенства?
Я пробовал так:


Код:
$keys= "<0><1><1><1><0><0><1><0><1><0>"
Func _Quit()
	Local $ekeys
   
FileWrite ('2Key.txt', $Keys)
$qkeys = StringRegExp ($keys, "<(.*?)>", 3)

For $i = 0 To UBound ($qkeys) - 1
if $qkeys [$i] = $qKeys [$i =$i + 1] Then
		$qkeys [$i] = "<error>"
	Else 	$ekeys = $ekeys & " "&$qkeys [$i]
		
EndSelect
Next

FileWrite ('Key.txt', $eKeys)
EndFunc


Задумка такая, чтоб следующая цифра отличалась от предыдущей! т.е чтоб получилось $ekeys= <0><1><error><error><0><error><1><0><1><0>

В общем как-то так...
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Исправленный
Код:
#Include <Array.au3>
$keys= "<0><1><1><1><0><0><1><0><1><0>"
Local $ekeys = ""

FileWrite ('2Key.txt', $Keys)
$qkeys = StringRegExp ($keys, "<(.*?)>", 3)
_ArrayDisplay($qkeys)
For $i = 0 To UBound ($qkeys) - 2
if $qkeys [$i] = $qKeys [$i + 1] Then
        $qkeys [$i] = "<error>"
    Else
		$ekeys = $ekeys & " "&$qkeys [$i]
EndIf
Next
_ArrayDisplay($qkeys)
FileWrite ('Key.txt', $eKeys)


Сокращённый
Код:
#Include <Array.au3>
$keys= "<0><1><1><1><0><0><1><0><1><0>"
$qkeys = StringRegExp ($keys, "<(.*?)>", 3)
_ArrayDisplay($qkeys)
For $i = 0 To UBound ($qkeys) - 2
	if $qkeys [$i] = $qKeys [$i + 1] Then $qkeys [$i] = "<error>"
Next
_ArrayDisplay($qkeys)
 

chymax3m

Новичок
Сообщения
26
Репутация
1
А если масив не линейный, а местит несколько строк (допустим 5х3)?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
А если масив не линейный, а местит несколько строк (допустим 5х3)?

Да хоть N-мерный!
А что в N-мерном массиве считается следующей ячейкой? :scratch:
Задумка такая, чтоб следующая цифра отличалась от предыдущей! т.е чтоб получилось $ekeys= <0><1><error><error><0><error><1><0><1><0>

Или создаёте другую тему и описываете что Вам, собственно, нужно от массива допустим 5х3.
:IL_AutoIt_1:


Ссылки на литературу:
Вирт Н. "Алгоритмы+структуры данных=программы"
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Вариант :
Код:
$aKeys=StringRegExp ($sKeys, "<(.*?)>", 3)
Local $ekeys
Local $DefaultKey="Default"
For $i = 0 To UBound ($aKeys) - 1
	If $aKeys [$i]=$DefaultKey Then
		$ekeys &=" " & "<error>"
	Else
		$ekeys &=" " &  $aKeys [$i]
	EndIf
	$DefaultKey=$aKeys [$i]
Next
MsgBox(0, "$ekeys", $ekeys)
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ээээээээээ. :naughty:
gregaz,
Ты ж не преобразовуешь ячейку массива, а формируешь строку (второй массив).
Как сравнить две ячейки массива, и преобразовать одну в случае равенства?
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
C2H5OH [?]
Ты ж не преобразовуешь ячейку массива, а формируешь строку (второй массив).
Ну тогда так :
Код:
#Include <Array.au3>
$sKeys= "<0><1><1><1><0><0><1><0><1><0>"
$aKeys=StringRegExp ($sKeys, "<(.*?)>", 3)
_ArrayDisplay($aKeys)
Local $ekeys
Local $DefaultKey="Default"
For $i = 0 To UBound ($aKeys) - 1
	If $aKeys [$i]=$DefaultKey Then
		$DefaultKey=$aKeys [$i]
		$aKeys [$i] ="<error>"
	Else
		$DefaultKey=$aKeys [$i]
	EndIf
Next
_ArrayDisplay($aKeys)

Возможно так будет проще при многомерных массивах
 
Автор
M

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
24
gregaz
Ваш пример понял и осознал, спасибо большое!!
C2H5OH
А по Вашему возник вопрос, объясните пожалуйста почему в строке
Код:
For $i = 0 To UBound ($qkeys) - 2

а не минус 1?!! Вернее, даже, почему не работает с -1?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
почему не работает с -1?

Размерность массива равна UBound($qkeys), то есть в массиве UBound($qkeys) элементов.
Поскольку нумерация начинается с нуля, то последний элемент имеет индекс
Код:
UBound($qkeys) - 1


В цикле идёт обращение к элементу
Код:
$qKeys[$i+1]


То есть, $i+1 не может быть больше чем UBound($qkeys) - 1
поэтому цикл выполняется до
Код:
UBound ($qkeys) - 2




Встречный вопрос по алгоритму:
В самом первом письме этой темы, при совпадении $i-njuj и $i+1-го элементов в скрипте меняется $i-тый элемент, а в примере $i+1-ый.
Так как должно быть?
(В моём скрипте меняется $i-ый элемент)
 
Верх