Функция генерирует указанное кол-во случайных чисел и выводит их в указанном формате (в массиве или строке)
Описание на русском
Пример
Пример показывающий время генерации чисел в старой и новой версии
История Весий
Автор(ы): XpycT (функция), идея ввывода в формате строки madmasles,
P.S.
С первой "полезняшкой" меня :laugh: :laugh: :laugh:
Код:
; #FUNCTION# ============================================================================================================
; Name...........: _RandomEx
; Description ...: Function generates a random numbers and displays them in a specified format.
; Syntax.........: _RandomEx($_iSNum, $_iENum, $_iRNumCount, $_iRetFormat, $_sRetDelimiter, $_iUnique)
; Parameters ....: $_iSNum - The smallest number to be generated. The default is 0.
; $_iENum - The largest number to be generated. The default is 1.
; $_iUnique - Specified if generated random numbers should be unique (0 = not unique, 1 = unique (Default))
; $_iRNumCount - Quantity of random numbers
; $_iRetFormat - Return format (0 = String (Default), 1 = Array)
; $_sRetDelimiter - Random numbers delimeter if return format is string. The default is ","
; Return values .: Success - Return random numbers between $_iSNum and $_iENum in specified format.
; Failure - 0, sets @error Returns 0 and sets @error flag to 1 if bad parameters
; |1 - $_iSNum equally or greater $_iENum
; |2 - Quantity of possible unique random numbers is less requested
; Author ........: XpycT
; Idea of return in string format madmasles http://autoit-script.ru/index.php/topic,6344.msg44489.html#msg44489
; =======================================================================================================================
Func _RandomEx($_iSNum = 0, $_iENum = 1, $_iUnique = 1, $_iRNumCount = 0, $_iRetFormat = 0, $_sRetDelimiter = ",")
Local $sRNumStr = "`", $iNumCount = 0
If $_iSNum >= $_iENum Then Return SetError(1, 0, 0)
If $_iUnique And ($_iENum - $_iSNum + 1) < $_iRNumCount Then Return SetError(2, 0, 0)
If $_iRNumCount = 0 Then $_iRNumCount = $_iENum - $_iSNum + 1
While $iNumCount <> $_iRNumCount
$iRNum = Random($_iSNum, $_iENum, 1)
If $_iUnique = 1 Then
If IsDeclared("<" & $iRNum & ">") Then ContinueLoop
Assign("<" & $iRNum & ">", "", 1)
$sRNumStr &= $iRNum & "`"
$iNumCount += 1
Else
$sRNumStr &= $iRNum & "`"
$iNumCount += 1
EndIf
WEnd
$sRNumStr = StringTrimLeft(StringTrimRight($sRNumStr, 1), 1)
If $_iRetFormat = 0 Then Return StringReplace($sRNumStr, "`", $_sRetDelimiter)
If $_iRetFormat = 1 Then Return StringSplit($sRNumStr, "`")
EndFunc
Описание на русском
; #FUNCTION# ==========================================================================================================
; Название...............: _RandomEx
; Описание ..............: Функция генерирует случайные числа и выводит их в указанном формате.
; Синтаксис..............: _RandomEx($_iSNum, $_iENum, $_iRNumCount, $_iUnique, $_iRetFormat, $_sRetDelimiter)
; Параметры .............: $_iSNum - Наименьшее число, которые будет сгенерированно
; $_iENum - Наибольшее число, которые будет сгенерированно
; $_iUnique - Определяет должны ли быть случайные числа уникальными (0 = не уникальные, 1 = уникальные (По умолчанию))
; $_iRNumCount - Кол-во случайных чисел которое будет сгенерированно
; $_iRetFormat - Определяет в каком формате вернуть случайные числа (0 = Строка (По умолчанию), 1 = Массив)
; $_sRetDelimiter - разделитель случайных чисел, если возвращаемый формат строка. По умолчанию "," (запятая)
; Возвращаемое значение .: Success - Случайные числа в указанном формате
; Failure - 0, @error
; |1 - $_iSNum большо или равно $_iENum
; |2 - Кол-во возможных случайных чисел меньше чем указано
; Автор..................: XpycT
; Идея ввывода в формате строки madmasles http://autoit-script.ru/index.php/topic,6344.msg44489.html#msg44489
; =======================================================================================================================
; Название...............: _RandomEx
; Описание ..............: Функция генерирует случайные числа и выводит их в указанном формате.
; Синтаксис..............: _RandomEx($_iSNum, $_iENum, $_iRNumCount, $_iUnique, $_iRetFormat, $_sRetDelimiter)
; Параметры .............: $_iSNum - Наименьшее число, которые будет сгенерированно
; $_iENum - Наибольшее число, которые будет сгенерированно
; $_iUnique - Определяет должны ли быть случайные числа уникальными (0 = не уникальные, 1 = уникальные (По умолчанию))
; $_iRNumCount - Кол-во случайных чисел которое будет сгенерированно
; $_iRetFormat - Определяет в каком формате вернуть случайные числа (0 = Строка (По умолчанию), 1 = Массив)
; $_sRetDelimiter - разделитель случайных чисел, если возвращаемый формат строка. По умолчанию "," (запятая)
; Возвращаемое значение .: Success - Случайные числа в указанном формате
; Failure - 0, @error
; |1 - $_iSNum большо или равно $_iENum
; |2 - Кол-во возможных случайных чисел меньше чем указано
; Автор..................: XpycT
; Идея ввывода в формате строки madmasles http://autoit-script.ru/index.php/topic,6344.msg44489.html#msg44489
; =======================================================================================================================
Пример
Код:
; Return Unique Random Numbers in String Format
$sRandom = _RandomEx(1, 10, 1, 9)
ConsoleWrite("$sRandom = " & $sRandom & @CR)
; Return Random Numbers in Array Format
$aRandom = _RandomEx(1, 10, 0, 9, 1)
For $i = 1 To $aRandom[0]
ConsoleWrite("$aRandom[" & $i & "] = " & $aRandom[$i] & @CR)
Next
; #FUNCTION# ============================================================================================================
; Name...........: _RandomEx
; Description ...: Function generates a random numbers and displays them in a specified format.
; Syntax.........: _RandomEx($_iSNum, $_iENum, $_iRNumCount, $_iRetFormat, $_sRetDelimiter, $_iUnique)
; Parameters ....: $_iSNum - The smallest number to be generated. The default is 0.
; $_iENum - The largest number to be generated. The default is 1.
; $_iUnique - Specified if generated random numbers should be unique (0 = not unique, 1 = unique (Default))
; $_iRNumCount - Quantity of random numbers
; $_iRetFormat - Return format (0 = String (Default), 1 = Array)
; $_sRetDelimiter - Random numbers delimeter if return format is string. The default is ","
; Return values .: Success - Return random numbers between $_iSNum and $_iENum in specified format.
; Failure - 0, sets @error Returns 0 and sets @error flag to 1 if bad parameters
; |1 - $_iSNum equally or greater $_iENum
; |2 - Quantity of possible unique random numbers is less requested
; Author ........: XpycT
; Idea of return in string format madmasles http://autoit-script.ru/index.php/topic,6344.msg44489.html#msg44489
; =======================================================================================================================
Func _RandomEx($_iSNum = 0, $_iENum = 1, $_iUnique = 1, $_iRNumCount = 0, $_iRetFormat = 0, $_sRetDelimiter = ",")
Local $sRNumStr = "`", $iNumCount = 0
If $_iSNum >= $_iENum Then Return SetError(1, 0, 0)
If $_iUnique And ($_iENum - $_iSNum + 1) < $_iRNumCount Then Return SetError(2, 0, 0)
If $_iRNumCount = 0 Then $_iRNumCount = $_iENum - $_iSNum + 1
While $iNumCount <> $_iRNumCount
$iRNum = Random($_iSNum, $_iENum, 1)
If $_iUnique = 1 Then
If IsDeclared("<" & $iRNum & ">") Then ContinueLoop
Assign("<" & $iRNum & ">", "", 1)
$sRNumStr &= $iRNum & "`"
$iNumCount += 1
Else
$sRNumStr &= $iRNum & "`"
$iNumCount += 1
EndIf
WEnd
$sRNumStr = StringTrimLeft(StringTrimRight($sRNumStr, 1), 1)
If $_iRetFormat = 0 Then Return StringReplace($sRNumStr, "`", $_sRetDelimiter)
If $_iRetFormat = 1 Then Return StringSplit($sRNumStr, "`")
EndFunc
Пример показывающий время генерации чисел в старой и новой версии
[box title=На моем ноутбуке время генерации чисел такое]
$iTimer_RandomEx_v1 = 145673.949342724
$iTimer_RandomEx_v2 = 822.24696155517
[/box]
$iTimer_RandomEx_v1 = 145673.949342724
$iTimer_RandomEx_v2 = 822.24696155517
[/box]
Код:
Dim $iMin = 1, $iMax = 10000, $iNum = 9999, $iUnique = 1, $iFormat = 0
$iTimer_RandomEx_v1 = TimerInit()
$sRandom = _RandomEx_v1($iMin, $iMax, $iUnique, $iNum, $iFormat, " | ")
ConsoleWrite("$iTimer_RandomEx_v1 = " & TimerDiff($iTimer_RandomEx_v1) & @CR)
$iTimer_RandomEx_v2 = TimerInit()
$sRandom = _RandomEx($iMin, $iMax, $iUnique, $iNum, $iFormat, " | ")
ConsoleWrite("$iTimer_RandomEx_v2 = " & TimerDiff($iTimer_RandomEx_v2) & @CR)
Func _RandomEx($_iSNum = 0, $_iENum = 1, $_iUnique = 1, $_iRNumCount = 0, $_iRetFormat = 0, $_sRetDelimiter = ",")
Local $sRNumStr = "`", $iNumCount = 0
If $_iSNum >= $_iENum Then Return SetError(1, 0, 0)
If $_iUnique And ($_iENum - $_iSNum + 1) < $_iRNumCount Then Return SetError(2, 0, 0)
If $_iRNumCount = 0 Then $_iRNumCount = $_iENum - $_iSNum + 1
While $iNumCount <> $_iRNumCount
$iRNum = Random($_iSNum, $_iENum, 1)
If $_iUnique = 1 Then
If IsDeclared("<" & $iRNum & ">") Then ContinueLoop
Assign("<" & $iRNum & ">", "", 1)
$sRNumStr &= $iRNum & "`"
$iNumCount += 1
Else
$sRNumStr &= $iRNum & "`"
$iNumCount += 1
EndIf
WEnd
$sRNumStr = StringTrimLeft(StringTrimRight($sRNumStr, 1), 1)
If $_iRetFormat = 0 Then Return StringReplace($sRNumStr, "`", $_sRetDelimiter)
If $_iRetFormat = 1 Then Return StringSplit($sRNumStr, "`")
EndFunc
Func _RandomEx_v1($_iSNum = 0, $_iENum = 1, $_iUnique = 1, $_iRNumCount = 1, $_iRetFormat = 0, $_sRetDelimiter = ",")
Local $sRNumStr = "`", $iNumCount = 0
If $_iSNum >= $_iENum Then Return SetError(1, 0, 0)
If $_iUnique And ($_iENum - $_iSNum + 1) < $_iRNumCount Then Return SetError(2, 0, 0)
If $_iRNumCount = 0 Then $_iRNumCount = $_iENum - $_iSNum + 1
While $iNumCount <> $_iRNumCount
$iRNum = Random($_iSNum, $_iENum, 1)
If $_iUnique = 1 Then
If Not StringInStr($sRNumStr, "`" & $iRNum & "`") Then
$sRNumStr &= $iRNum & "`"
$iNumCount += 1
EndIf
Else
$sRNumStr &= $iRNum & "`"
$iNumCount += 1
EndIf
WEnd
$sRNumStr = StringTrimLeft(StringTrimRight($sRNumStr, 1), 1)
If $_iRetFormat = 0 Then Return StringReplace($sRNumStr, "`", $_sRetDelimiter)
If $_iRetFormat = 1 Then Return StringSplit($sRNumStr, "`")
EndFunc
История Весий
v2 [08.01.2012] - Изменен способ проверки уникальности.
AZJIO [?]
v1 [28.08.2011] - Первый выпуск.
AZJIO [?]
за счёт поиска повторов не в строке, а методом создания локальных переменных
v1 [28.08.2011] - Первый выпуск.
Автор(ы): XpycT (функция), идея ввывода в формате строки madmasles,
P.S.
С первой "полезняшкой" меня :laugh: :laugh: :laugh: