Что нового

[Массивы] посчитать группы чисел

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Здравствуйте.
Не могу придумать как подсчитать количество групп чисел в массиве.
Код:
#include <Array.au3>
Local $a12[39]=['',60,61,62,63,64,'',77,78,79,80,81,'',93,94,95,96,97,98,99,100,110,111,112,113,114,115,116,117,127,128,129,130,131,132,133,134]
;Local $a12[38]=['',60,61,62,63,64,'',77,78,79,80,81,'',93,94,95,96,97,98,99,100,110,111,112,113,114,115,116,117,127,128,129,130,131,132,133,134,''];<<<может быть и так.
_ArrayDisplay ($a12)

Как посчитать группы чисел идущих по порядку?
Т.е. сколько групп, с 5 значениями и с 8 значениями? и т.д
В данном примере должно получиться с 5 значениями две группы, с 8 три группы.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Re: [Массивы] посчетать группы чисел

Почему третья группа три по 8 , а не 24 ?
 
A

Alofa

Гость
Re: [Массивы] посчетать группы чисел

mr.Gbabak по-видимому вы запутались и решили запутать остальных.
Начинаем гадать... Может вы подсчитываете окончания чисел в массиве?
Код:
#include <Array.au3>
Local $a12[38]=['',60,61,62,63,64,'',77,78,79,80,81,'',93,94,95,96,97,98,99,100,110,111,112,113,114,115,116,117,127,128,129,130,131,132,133,134,''];<<<может быть и так.

Local $aArray[10]
For $i = 0 To UBound($a12) -1
	$aIndex = StringRegExp($a12[$i], '(\d)$', 1)
	If @error Then ContinueLoop
	$aArray[Number($aIndex[0])] += 1
	; _ArrayDisplay($aArray, $i & ' | ' & $aIndex[0]) ; Пошагово
Next
_ArrayDisplay($aArray)
 
Автор
M

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Re: [Массивы] посчетать группы чисел

Попробую уточнить, что мне требуется.
Группа 1 должна быть равной 2, т.к. ['',60,61,62,63,64,'',77,78,79,80,81,''....]
Группа 2 должна быть равной 3 т.к. 93,94,95,96,97,98,99,100,110,111,112,113,114,115,116,117,127,128,129,130,131,132,133,134]
Значения идущие по порядку, относятся к одной группе, если следующее значение >=2 то это уже другая группа.
примерно так
Код:
If $Arr12[3]-$Arr[2]>=2 then $grupa2+=1

Но в тоже время должно учитываться кол-во (или длина?) значений идущих по порядку.
Код:
For $i = 0 To UBound ($arr)-1
		If $arr[$i][1]='' Then
				;$a=$i
				For $j=$i To UBound ($arr)-1
					If $arr[$j][1]='' Then
						$c= $j-$i
				;		MsgBox (0, '', $c)
							Switch $c
								Case 2
									$grupa1 +=1
								Case 6
									$grupa2+=1
                                                                case 9
                                                                        $grupa3 +=1

							EndSwitch
						$c=0
						$i = $j
					EndIf
MsgBox (0, '', $Grupa1&@CR&$grupa2&@CR&$grupa3)
 
A

Alofa

Гость
Re: [Массивы] посчетать группы чисел

mr.Gbabak сказал(а):
Группа 1 должна быть равной 2, т.к. ['',60,61,62,63,64,'',77,78,79,80,81,''....]
Я вижу 2 группы.

mr.Gbabak сказал(а):
Группа 2 должна быть равной 3 т.к. 93,94,95,96,97,98,99,100,110,111,112,113,114,115,116,117,127,128,129,130,131,132,133,134]
Значения идущие по порядку, относятся к одной группе, если следующее значение >=2 то это уже другая группа.
А так я вижу три группы.

И того здесь 5 групп.



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

Код:
#include <Array.au3>
Local $a12[]=['',60,'',60,61,62,63,64,'',77,78,79,80,81,'',93,94,95,96,97,98,99,100,110,111,112,113,114,115,116,117,127,128,129,130,131,132,133,134,''];<<<может быть и так.
Local $aArray[0][2], $iValue, $iValuePrev

For $i = 0 To UBound($a12) -1
	$Ub = UBound($aArray)
	If Not IsInt($a12[$i]) Then ContinueLoop
    $iValue =  $a12[$i] - $iValuePrev
	If $iValue = 1 Then
		$aArray[$Ub-1][0] += 1
		$aArray[$Ub-1][1] &= $a12[$i] & '|'
	Else
		ReDim $aArray[$Ub+1][2]
		$aArray[$Ub][0] = 1
		$aArray[$Ub][1] = $a12[$i] & '|'
	EndIf
	$iValuePrev = $a12[$i]
Next
_ArrayDisplay($aArray)
 
Верх