Что нового

существует ли что-то типа "хеш функции"?

ZlojBoter

Новичок
Сообщения
55
Репутация
0
Возможно не совсем правильно назвал темку.
В общем, есть ли такая функция, в которую можно записывать/считывать данные по группе/ключу? То есть примерно как в ини файле. Придумываю группу,ключ и значение, вызываю функцию в которую ввожу эти три "слова". В качестве "носителя информации" используется какой-нибудь массив или переменная. Затем вызываю эту же функцию, или "парную"(противоположную) ей, ввожу группу и ключ, и получаю значение ключа.
Пока придумалось нечто "самопальное" ;D. Хотелось бы знать, есть ли грамотные функции :smile:
Код:
Func HashSimulator($opt,Byref $arruse,$groupp,$key,$x)
	Local $ret,$len,$bufer,$i,$per,$hexg,$hexk,$hash,$index,$igroupp,$ikey,$prov,$red
	
If $arruse[130000]="" Then
$arruse[130000]=130001
EndIf
	
$ret=0
$per=$groupp
$len=StringLen($per)
$bufer=0
For $i=1 To $len
$bufer=	$bufer+Dec(StringMid(StringToBinary(StringMid($per, $i, 1), 3),3,4))
Next
$bufer=hex($bufer,8)

$bufer=StringMid($bufer, 7, 2)
$hexg=$bufer

$per=$key
$len=StringLen($per)
$bufer=0
For $i=1 To $len
$bufer=	$bufer+Dec(StringMid(StringToBinary(StringMid($per, $i, 1), 3),3,4))
Next
$bufer=hex($bufer,8)

$bufer=StringMid($bufer, 7, 2)
$hexk=$bufer
$hash=dec($hexg&$hexk)

If $opt="w" Then
If $arruse[$hash*2-1]="" Then
$arruse[$hash*2-1]=1
$arruse[$hash*2]=$arruse[130000]
$arruse[130000]=$arruse[130000]+4
$arruse[$arruse[$hash*2]]=$x
$arruse[$arruse[$hash*2]+1]=$groupp
$arruse[$arruse[$hash*2]+2]=$key
$arruse[$arruse[$hash*2]+3]=0
Else
	$index=$arruse[$hash*2]
	$prov=0
For $i=1 To $arruse[$hash*2-1]
$igroupp=$arruse[$index+1]
$ikey=$arruse[$index+2]
If $igroupp=$groupp And $ikey=$key Then
$arruse[$index]=$x
$prov=1
exitloop
Else
If 	$i<$arruse[$hash*2-1] Then
$index=$arruse[$index+3]
EndIf
EndIf	
Next

If $prov=0 Then
$arruse[$index+3]=$arruse[130000]	
$index=$arruse[130000]
$arruse[130000]=$arruse[130000]+4
$arruse[$hash*2-1]=$arruse[$hash*2-1]+1
$arruse[$index]=$x
$arruse[$index+1]=$groupp
$arruse[$index+2]=$key
$arruse[$index+3]=0
$red=$arruse[130000]
ReDim $arruse[$red+100]

EndIf	
EndIf




EndIf	

If $opt="r" Then
If $arruse[$hash*2-1]<>"" Then	
	$index=$arruse[$hash*2]	
For $i=1 To $arruse[$hash*2-1]
$igroupp=$arruse[$index+1]
$ikey=$arruse[$index+2]
If $igroupp=$groupp And $ikey=$key Then
$ret=$arruse[$index]
exitloop
Else
If 	$i<$arruse[$hash*2-1] Then
$index=$arruse[$index+3]
EndIf
EndIf	
Next	
	
EndIf	
	
	

EndIf
Return $ret
EndFunc


Реализация такая:
Код:
Global $arruse[200000]
HashSimulator("w",$arruse,"группа1","ключ1","значение1")
$x=HashSimulator("r",$arruse,"группа1","ключ1","")
 
Автор
Z

ZlojBoter

Новичок
Сообщения
55
Репутация
0
madmasles, вот то что там еще и удалять можно это гуд.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
ZlojBoter,
Плюс объект Scripting.Dictionary поддерживает вложенные объекты, т.е. можно дерево строить.
 
Верх