[Hilfe] Array etc ? übergeben ?

#Kev

Grünschnabel
Hallo Communinty,

Ich hoffe ich bin in diesem Bereich hier richtig ist mein 1. Post und habe vor auch in Zukunft öfter hier zu sein :)

Ich habe da gerade ein Problem welches ich irgendwie nicht wirklich lösen kann.

Es geht um ein [Server --> Client] Packet Problem.

Server schickt ein Packet.

z.b:

Code:
#region Object
                                if (_pck.Opcode == 0x01) // Obj wird erzeugt. mit a = einmalige zahl und b die "struktur / aussehens" id welches es öfter gibt.
                                {
                                    uint a = _pck.ReadUInt32();               // bsp: 1000
                                    uint b = _pck.ReadUInt32();              //  bsp: 500
                                }
                                #endregion

Die Infos A und B sollten in eine Art Array oder Liste geschrieben werden Damit ich diese in OpCode 0x02 nutzen kann.

Code:
if (_pck.Opcode == 0x02) { // Obj wird zerstört.

uint c = _pck.ReadUInt32(); // gleich wie bei Opcode 0x01 a

if( wenn in der liste wo (a und b) stehen a = c ist ) {

Console.WriteLine("Obj: " + c + " mit der ID: " + b + " wurde zerstört.");
// Danach sollte A und B aus der Liste entfernt werden .
List.Remove(C);

 }
}

Ich hoffe es ist verständlich was ich damit sagen will und das ihr mir helfen könnt.
 

#Kev

Grünschnabel
Im Grunde brauch ich eine Liste :

Es werden 5 Objekte gespawnt. alle haben die gleiche ObjID ( 1500 ) aber jedes Obj welches gespawnt wird hat nochmal eine eigene "Unique" ID

100001 , 1500
100002 , 1500
100003 , 1500
100004 , 1500
100005 , 1500

Wenn ich jetzt also das Obj mit der UniqueID 100003 zerstöre soll die Liste danach so aussehen:

100001 , 1500
100002 , 1500
100004 , 1500
100005 , 1500

Somit sind noch 4 Objekte vorhanden sobald aber ein Obj zerstört wird gibt mir die Console die ObjID von der Zugehörigen UniqueID aus.

Ich muss halt irgendwie noch abfragen können ob ( Wenn das Obj Zerstört wird auch in der Liste ist wenn true dann wird die ObjID ausgegeben und die UniqueID zeile rausgelöscht)
 

Halfbax

Erfahrenes Mitglied
Was ist jetzt die Frage? Wenn es darum geht ein Objekt aus deiner Liste zu entfernen hast du dir in deinem ersten Post bereits selbst die Lösung gegeben.

https://msdn.microsoft.com/de-de/library/bb397906.aspx

Eine Möglichkeit wäre beispielsweise LINQ
C#:
List<int[]> objectList = new List<int[]>();
objectList.Add(new int[] {00001, 1500});

if(objectList.Find(x => x[0] == 00001) != null)
{
   Console.WriteLine("Gefunden!");
}

Ich würde das Ganze aber auf eine Klasse auslagern (persönlicher Geschmack). In etwa so
C#:
class ObjectList
{
   public int uniqueId { get; set; }
   public int anotherId { get; set; }
}
C#:
List<ObjectList> objectList = new List<ObjectList>();

ObjectList item = new ObjectList();
item.anotherId = 1500;
item.uniqueId = 00001;
objectList.Add(item);

if(objectList.Find(x => x.uniqueId == 00001) != null)
{
   Console.WriteLine("Gefunden!");
}

PSEUDO-Code!

LG
 

#Kev

Grünschnabel
Danke für die Antwort.

Bei meinem Beitrag hatte ich das "List.Remove(C);" eigentlich nur als PSEUDO-Code hingeschrieben mir war nicht bewusst das es wirklich so easy geht ;)

Habe es jetzt so gelöst:

Code:
public static Dictionary<UInt32, UInt32> ObjList = new Dictionary<UInt32, UInt32>();

// weiter unten beim OpCode (0x01) 

ObjList.Add(UniqueID, ObjID);

// Und dann noch weiter unten beim OpCode (0x02) 

foreach (KeyValuePair<uint, uint> kvp in ObjList)
                                        {

                                            if (ObjList.ContainsKey(uid))
                                            {
                                                Console.WriteLine("-------------- Remove Start ----------");
                                                Console.WriteLine("UniqueID = {0}, ObjID = {1}", kvp.Key, kvp.Value);
                                                Console.WriteLine("-------------- Remove End ------------");
                                                
                                            }
                                        }
ObjList.Remove(uid);