Что нового

Библиотека для сравнения строк/чисел/1D и 2D массивов

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
AutoIt: 3.3.4.0
Версия: 1.0

Категория: Кодирование / Шифрование

Описание:
Данная библиотека содержит только 3 (пока) функции, основное предназначение которых - сравнение различного рода объектов. В случае, если объект строка - лучше использовать обычный StringCompare. Но для строки, также, можно подсчитать его MD5-хеш, что на мой взгляд является достаточно полезным временами (скрипты с аутентификацией). Особенно полезным, на мой взгляд, библиотека может оказаться в случае сравнения одно- и дву-мерных массивов. Массивы размерностью выше 2 не обрабатываются (Возможно в будущем).

Принцип сравнения прост:

Объект 1D - берется элемент и в зависимости от его типа ставится префикс. И так для каждого элемента. Затем, все полученные строки конкатенируются и для полученной суммарной строки считается его MD5-хеш. Этот хеш, в дальнейшем, используется для сравнения различных одномерных массивов.

Объект 2D - в этом случае, каждая строка массива рассматривается как отдельный 1D-массив. Для него проделывается операция из предыдущего пункта. Все полученные хеш-суммы, в итоге, конкатенируются и для нее считается итоговая хеш-сумма. В дальнейшем, эта сумма используется для сравнения различных 2D-массивов.

Преимущества - при сравнении массивов нет необходимости сравнивать каждый элемент с каждым при повторных сравнениях или сравнениях нескольких объектов между с обой. Достаточно один раз посчитать хеш-сумму для необходимых массивов и производить сравнения хеш-сумм.

Недостатки:
Главный недостаток - Возможно есть баги или несоответствия. Прошу пользователей протестировать применив всю фантазию :smile:
Врожденный недостаток - Наличие MD5-коллизий, связанный с использованием MD5. Это унаследованное неудобство и от него никуда не деться. Но, как говорят эксперты, вероятность случайного появления коллизии ничтожна мала. Пока что, все коллизии искуственные.
Код/Пример:
Код:
#include <MD5.au3>
$a = 'The quick brown fox jumps over the lazy dog'
Dim $b[3] = [1, 2, 3]
Dim $c[4] = [1, 'a', Binary('0xFF871A')]
Dim $d[3][4] = [[1, 2, 3, 4], ['a', 'b', 'c', 'd'], ['1', 'True', 3, False]]
Dim $e[3] = [1, 2, 3]
Dim $f[3] = [1, 2, '3']
ConsoleWrite('"' & $a & '" has MD5 - ' & _MD5_MD5ForString($a) & @CRLF & _
				'"an array $b = [1, 2, 3]" has conventional MD5 hash - ' & _MD5_MD5ForObject($b) & @CRLF & _
				'and another array "$c = [1, a, 0xFF871A]" has conventional MD5 hash - ' & _MD5_MD5ForObject($c) & @CRLF & _
				'2D array has MD5 - ' & _MD5_MD5ForObject($d) & @CRLF & _
				'Comparison of 2 identical objects $b and $e - ' & _MD5_ObjectsCmp($b, $e) & @CRLF & _
				'Comparison of 2 "pseudo" identical objects $b and $f - ' & _MD5_ObjectsCmp($b, $f) & @CRLF _
			)
ConsoleWrite(@CRLF)

Источник: Форум русского сообщества пользователей AutoIt
Автор(ы): Kaster (kastermight [at] gmail dot com)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Re: [Данные, строки] Библиотека для сравнения строк/чисел/1D и 2D массивов

Отличная библиотека. Написана грамотно, описания присутствуют. Пока не разбирался, но выглядит шикарно.

+1
 

mr.Gbabak

Осваивающий
Сообщения
245
Репутация
20
Ага, я тоже заморочился...и не нашел!!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319

Вложения

  • 4,5 КБ Просмотры: 21
  • 6,7 КБ Просмотры: 18

grott

Новичок
Сообщения
3
Репутация
0
Много времени потратил на исследование вопроса сравнения 2Д массивов. А тут все уже есть и работает. Огромное спасибо авторам!!!
 

o.karpovych1982

Новичок
Сообщения
2
Репутация
0
Вы не правы. Я уверен. Давайте обсудим это. Пишите мне в PM, пообщаемся.
 
Верх