Avatar billede Slettet bruger
09. august 2006 - 18:32 Der er 5 kommentarer og
1 løsning

MultiArray Problem

Har tidl. fået hjælp til at lave dette Multi dimentionelle arraylist.. har udbygget det og det virker helt fint. Men kan ikke få en IndexOf funktion til at fungere, håber nogen kan hjælpe..

class MultiArray
    {
        ArrayList[] ArrayX = null;

        public MultiArray(uint dim)
        {
            ArrayX = new ArrayList[dim];
            for (int idx = 0; idx < ArrayX.Length; idx++)
                ArrayX[idx] = new ArrayList();
        }

        public void Add(params Object[] arg)
        {
            for (int idx = 0; idx < arg.Length; idx++)
            {
                if (idx >= ArrayX.Length) break;
                ArrayX[idx].Add(arg[idx]);
            }
        }





Denne virker ikke, kan ikke HELT se logikken i det :)

        public int IndexOf(Object Item, int Column)
        {
            return ArrayX[Column].IndexOf(Item);
        }

Den skal lede i den angivne column efter det object man giver den, og så skal den returne index af den item
Avatar billede nielle Nybegynder
09. august 2006 - 18:43 #1
Det virker nok korrekt hos mig. Kan du give et ekesmpel på hvordan du forsøger at bruge det, og hvad der sker hos dig?
Avatar billede md_craig Nybegynder
09. august 2006 - 21:39 #2
Teknisk set så burde den virke som Nielle siger, men hvis du leder efter Obj X i Col 1 men Obj X ligger i Col 3, og då dermed forventer et index, så får du ikke noget...

Dette kan løses med en metode der Leder det hele igennem og retuenere både Row og Col...

public void IndexOf(object item, out int column, out int row)
{
  int col = -1, row = -1;
  for(int i = 0; i < ArrayX.Length; i++)
  {
    if( ArrayX[i].Contains(item) )
      col = i; row = ArrayX[i].IndexOf(item);
  }
}



Metoden kan så benøttes:

public static void Main()
{
  MultiArray ma = new MultiArray(3);
  ma.Add(new char[]{'a','b','c'});
  ma.Add(new char[]{'d','h','g'});
  ma.Add(new char[]{'e','f','i'});

  int c = 0, r = 0;
  Console.Writeline(" Searching Multiarray for x ")
  ma.IndexOf('x',c,r);
  Console.Writeline(" First found at ({0},{1}), (if -1 none whas found)",c,r);
  Console.Writeline() // skulle give -1,-1 (eksisterede ikke)

  Console.Writeline(" Searching Multiarray for f ")
  ma.IndexOf('f',c,r);
  Console.Writeline(" First found at ({0},{1}), (if -1 none whas found)",c,r);
  Console.Writeline() // skulle give 2,1 (eksisterede)
}
Avatar billede Slettet bruger
09. august 2006 - 21:43 #3
Hvis det virker når jeg tjekker det i morgen, er du min gud! :D

Kort sagt, tak for hjælpen
Avatar billede Slettet bruger
10. august 2006 - 12:57 #4
Det virker!.. smid et svar!;)
Avatar billede md_craig Nybegynder
10. august 2006 - 18:26 #5
sv
Avatar billede md_craig Nybegynder
10. august 2006 - 18:29 #6
Der mangler ellers lige lidt på den... den if der snød mig lige i farten grundet jeg lavede en fyy ting... :P

public void IndexOf(object item, out int column, out int row)
{
  int col = -1, row = -1;
  for(int i = 0; i < ArrayX.Length; i++)
  {
    if( ArrayX[i].Contains(item) )
    {
      col = i; row = ArrayX[i].IndexOf(item);
      return; // <- Alt efter om du vil have den til at returnere for den første eller sidste forekomst, smider du en return her... (Med return bliver det første forekoms, uden return den sidste...
    }
  }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester