Mit einem Array arbeiten

12/02/2011 13:30 Whoknowsit#1
Moin,

ich versuche gerade, sinnvoll mit einem definierten Array zu arbeiten:

dim $myArray[1][2]

Ich möchte eine Funktion erstellen, die dem Array den im Funktionsparameter angegebenen Wert hinzufügt oder wenn selbiger bereits im Array existiert, aus selbigem entfernt:

Code:
Func addToArr($param)

If 'existiert noch nicht' Then
	redim $myArray[(UBound($attached)+1)-1][2]
	
	$myArray[0][0] = $param
	$myArray[0][1] = 1
ElseIf 'existiert bereits' Then
	_ArrayDelete($param)
EndIf

EndFunc
So in etwa hab ich mir das vorgestellt. Wie mache ich das am Besten!?
12/02/2011 14:16 lolkop#2
Quote:
Originally Posted by Whoknowsit View Post
Moin,

ich versuche gerade, sinnvoll mit einem definierten Array zu arbeiten:

dim $myArray[1][2]

Ich möchte eine Funktion erstellen, die dem Array den im Funktionsparameter angegebenen Wert hinzufügt oder wenn selbiger bereits im Array existiert, aus selbigem entfernt:

Code:
Func addToArr($param)

If 'existiert noch nicht' Then
	redim $myArray[(UBound($attached)+1)-1][2]
	
	$myArray[0][0] = $param
	$myArray[0][1] = 1
ElseIf 'existiert bereits' Then
	_ArrayDelete($param)
EndIf

EndFunc
So in etwa hab ich mir das vorgestellt. Wie mache ich das am Besten!?
hast du ein 2d array, so musst du auch wenigstens 2 parameter angeben, um das ganze sinnvoll zu gestalten. ist der 2te wert wie in deinem code immer 1, so macht es keinen sinn mit einem 2d array zu arbeiten.
12/02/2011 14:20 Whoknowsit#3
Stimmt. Okay... Danke ^^
12/02/2011 15:41 lolkop#4
ansonsten fallen mir für dein löschen problem spontan 2 mögliche wege ein.

1. der saubere weg
beim auffinden des elementes in der liste, werden alle folge elemente ein
element nach vorne verschoben, und das array als $array[alt-1][2] definiert.

2. der schnelle weg
beim auffinden des elementes wird $array[element][0] auf einen vorher definiereten "verfügbarkeits wert" (zb -1) gesetzt.
hier würde beim einfügen eines elementes das array nach stellen durchsucht werden, welche diesen wert haben, da diese frei verfügbar sind.


der saubere weg hat den vorteil, das man keinen platz verschwendet, bei sehr großen array allerdings sehr viel aufwand hat. stell dir vor du hast ein 100.000 elementiges array und willst das erste element löschen. hierfür müsste alle 99.999 folge-elemente einen nach vorne verschoben werden.

beim schnellen weg wird der inhalt einfach auf verfügbar gesetzt und das problem ist gelöst. nachteil ist, das frei verfügbare arrayplätze leider auch speicher in anspruch nehmen. hinzu kommt, das beim einfügen eines elementes, vorher das array durchlaufen werden muss, um eventuell vorhandene freie plätze zu finden.
12/02/2011 16:05 Whoknowsit#5
Danke :) Ich frage mich, was ich mir bei meinem ersten Versuch gedacht habe....

Code:
Func addToArr($param)
	If _ArrayBinarySearch($myArray, $param) < 1 Then
		_ArrayAdd($myArray, $param)
	Else
		_ArrayDelete($myArray, $param)
	EndIf
EndFunc
Warum leicht machen, wenn's auch schwer geht... ^^

EDIT:

Selbstkorrektur...

Code:
Func addToArr($param)
	If _ArrayBinarySearch($myArray, $param) < 1 Then
		_ArrayAdd($myArray, $param)
	Else
		For $n = 0 To UBound($myArray) -1
			$index = _ArraySearch($myArray, $param, 0)
			If @error Then
			Else
				_ArrayDelete($myArray, $index)
			EndIf
		Next
	EndIf
EndFunc