Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Bestimmte Werte aus Array löschen (http://www.expert-advisor.com/forum/showthread.php?t=7029)

Mr_Snow 29.06.21 03:34

Bestimmte Werte aus Array löschen
 
Hi,

wieder mal die Arrays, die einem in MQL4 die Nerven kosten. Ich hoffe, Ihr könnt mir einen Denkanstoß geben:

Ich habe ein Array Katze[20][2]

Ich fülle das Array

#define Name 0
#define Farbe 1

Katze[0][Name] = Tim;
Katze[0][Farbe] = schwarz;
...
Katze[19][Name] = Lisa;
Katze[19][Farbe] = gefleckt;

Jetzt soll zB: Katze 3, 4, 10 und 15 aus dem Array gelöscht werden, ohne, dass sich die ursprüngliche Reihenfolge ändert.
In anderen Programmen ist das easy, Wert löschen und der Index rückt nach. In MQL4 bin ich am verzweifeln :rolleyes:

Kann man das irgendwie lösen? Welche Werte ich löschen muss, erfahre ich immer erst in einer for-schleife, die prüft, welcher Wert aus dem Array raus muss. Ich kann diese zu löschenen Werte (also den Index), wenn es sein muss, auch in einem weiteren Array zwischenspeichern.

Besten Dank vorab.

Indikator-Trading 29.06.21 12:27

Liste der Anhänge anzeigen (Anzahl: 1)
Hier eine Lösung mit einem zweidimensionalen Array und deinem Katzenbeispiel:

Code:

//+------------------------------------------------------------------+
//|                                                ArrayExample.mqh |
//|                                  Copyright 2021, Trades Tech LLC |
//|                                                    a.timo@web.de |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, Traders Tech LLC"
#property link      "https://www.smarttraderstech.com"
#property version  "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                  |
//+------------------------------------------------------------------+
int OnInit()

{
  string StringArray[][2];

  ArrayResize(StringArray, 3);
  StringArray[0][0] = "Susi";
  StringArray[0][1] = "Gefleckt";
  StringArray[1][0] = "Lilli";
  StringArray[1][1] = "Grau";
  StringArray[2][0] = "Emmi";
  StringArray[2][1] = "Schwarz";
 
  for(int i = 0 ; i < ArrayRange(StringArray,0) ; i++)
    Print("Katze Nr. ", i+1, " heißt ", StringArray[i][0], " und ist ", StringArray[i][1]);
  Print("Katze " , StringArray[1][0] , " wird jetzt aus dem Array entfernt!");
 
  RemoveArrayElement(StringArray, 1);
 
  for(int i = 0 ; i < ArrayRange(StringArray,0) ; i++)
    Print("Katze Nr. ", i+1, " heißt ", StringArray[i][0], " und ist ", StringArray[i][1]);

  return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void RemoveArrayElement(string &LocalStringArray[][], int ElementNumber)
{
  string TempArray[][2];
  ArrayCopy(TempArray,LocalStringArray);
  ArrayResize(LocalStringArray,ArrayRange(LocalStringArray,0)-1);
 
  int j = 0;
  for(int i = 0; i <  ArrayRange(TempArray,0) ; i++)
  {
    if(i != ElementNumber)
    {
      LocalStringArray[j][0] = TempArray[i][0];
      LocalStringArray[j][1] = TempArray[i][1];
      j++;
    }
  }
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Expert tick function                                            |
//+------------------------------------------------------------------+
void OnTick()
{

}
//+------------------------------------------------------------------+


Das wäre das Printergebnis zu diesem EA:

Katze Nr. 1 heißt Susi und ist Gefleckt
Katze Nr. 2 heißt Lilli und ist Grau
Katze Nr. 3 heißt Emmi und ist Schwarz
Katze Lilli wird jetzt aus dem Array entfernt!
Katze Nr. 1 heißt Susi und ist Gefleckt
Katze Nr. 2 heißt Emmi und ist Schwarz

Mr_Snow 01.07.21 01:14

Vielen Dank für das Beispiel, in MQL4 ist das aufwendig, aber so kann ich mich reindenken. Ganz dickes Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum