Что нового

[Массивы] Переместить элемент массива в конец массива.

Exieros

Новичок
Сообщения
6
Репутация
0
Есть массив $hosts где нулевой его элемент, это количество элементов массива, а в остальных хранятся какие-то данные. Мне нужно взять элемент массива допустим десятый и переместить его в самый конец массива, количество элементов не должно изменится! Пробовал играться с _ArrayDelete и _ArrayInsert получилась белеберда. В общем помогите пожалуйста.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
$Tmp = $hosts[Элемент]
_ArrayDelete( $hosts, Элемент )
_ArrayAdd( $hosts, $Tmp )
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Код:
#include <array.au3>

Global $a[6] = [6, "раз", "два", "три", "четыре", "пять"]
_ArrayDisplay($a)
_ArrayAdd($a, $a[2])
_ArrayDisplay($a)
_ArrayDelete($a, 2)
_ArrayDisplay($a)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Exieros,
Так?
Код:
#include <Array.au3>

Global $a1[6] = [5, 'раз', 'два', 'три', 'четыре', 'пять'], _
		$a2[6][3] = [['ноль', 'ноль', 'ноль'],['раз', 'раз', 'раз'],['два', 'два', 'два'],['три', 'три', 'три'],['четыре', 'четыре', 'четыре'],['пять', 'пять', 'пять']]

ConsoleWrite(_ArrayPushEx($a1, 3, 1) & @LF)
_ArrayDisplay($a1)

ConsoleWrite(_ArrayPushEx($a2, 0) & @LF)
_ArrayDisplay($a2)

Func _ArrayPushEx(ByRef $a_Array, $i_Index, $i_Start = 0)
	Local $i_Ub1, $i_Ub2, $a_Tmp

	If Not IsArray($a_Array) Then Return SetError(1, 0, False)
	If UBound($a_Array, 0) > 2 Then Return SetError(2, 0, False)
	$i_Ub1 = UBound($a_Array, 1)
	$i_Ub2 = UBound($a_Array, 2)
	Switch $i_Start
		Case 0, 1
		Case Else
			Return SetError(3, 0, False)
	EndSwitch
	If $i_Start > $i_Ub1 - 1 Then Return SetError(4, 0, False)
	If ($i_Index < $i_Start) Or ($i_Index > $i_Ub1 - 1) Then Return SetError(5, 0, False)
	$a_Tmp = $a_Array
	If $i_Ub2 Then
		For $i = $i_Start To $i_Index - 1
			For $j = 0 To $i_Ub2 - 1
				$a_Array[$i][$j] = $a_Tmp[$i][$j]
			Next
		Next
		For $i = $i_Index To $i_Ub1 - 2
			For $j = 0 To $i_Ub2 - 1
				$a_Array[$i][$j] = $a_Tmp[$i + 1][$j]
			Next
		Next
		For $j = 0 To $i_Ub2 - 1
			$a_Array[$i_Ub1 - 1][$j] = $a_Tmp[$i_Index][$j]
		Next
	Else
		For $i = $i_Start To $i_Index - 1
			$a_Array[$i] = $a_Tmp[$i]
		Next
		For $i = $i_Index To $i_Ub1 - 2
			$a_Array[$i] = $a_Tmp[$i + 1]
		Next
		$a_Array[$i_Ub1 - 1] = $a_Tmp[$i_Index]
	EndIf
	Return True
EndFunc   ;==>_ArrayPushEx
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Что-то я не понял проблемы ?
Код:
#include <array.au3>

Global $a[6] = [6, "раз", "два", "три", "четыре", "пять"]
_ArrayDisplay($a)
	
_ArraySwap($a[3], $a[UBound($a)-1])
	
_ArrayDisplay($a)
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
gregaz [?]
Что-то я не понял проблемы ?
Я так понял, что нужно переместить, а не поменять местами.
Но, если главное условие - сохранение количества элементов, а не их порядка, то swap тоже подходит.
 
Верх