Avatar billede heidi_j Nybegynder
07. januar 2005 - 10:55 Der er 10 kommentarer

Multiarray og ArrayList

Jeg har et multiarray af objekter (klasser), men hvordan kan jeg definere det ved at gøre brug af Collections, f.eks. ArrayList?

F.eks.:
private MyClass[,] myClasses = new MyClass[100, 100];

Dette er ikke måden at gøre det på, men hvordan kan jeg holde styr og oprette multiarrays ved brug af Collections?
Avatar billede cayman Nybegynder
07. januar 2005 - 11:26 #1
Hej heidi_j

Mener multidimensionelle arrays?

Det er sådan set lidt besværligere med collections. I et todimensionelt array kan du skrive:
myArray[1][3]="etEllerAndet";

Det kan du ikke helt med Collections. En Collection er et object som alt andet, og du kan add'e og remove alle typer objecter til Collections. Du kan altså have Collections i collections. Du kan også have arrays i collections.

Ovenstående kodelinie vil se således ud med ArrayLists:

// .. antager du har en liste der hedder myOuterList

((String)((ArrayList)myOuterList.get(1)).get(3))="etEllerAndet";

Skal du oprette Lister i lister gør du således:

List outerList = new ArrayList();
List innerList1 = new ArrayList();
innerList1.add(.. et object  ..);
List innerList2 = new ArrayList();
innerList2.add(.. et object  ..);
innerList2.add(.. et object  ..);
List innerList3 = new ArrayList();
innerList3.add(.. et object  ..);

outerList.add(innerList1);
outerList.add(innerList2);
outerList.add(innerList3);

Var det svar på dit spørgsmål?
mvh
Cayman
Avatar billede cayman Nybegynder
07. januar 2005 - 11:32 #2
Sorry Heidi,

Jeg troede jeg var i java-verdnen. Glem mit svar :o)
Avatar billede heidi_j Nybegynder
07. januar 2005 - 11:36 #3
Det er okai :) Jeg var lige væk et øjeblik i din kode, og kunne ikke rigtig få det til at virke, sådan som jeg gerne ville have det.

Mit problem er, at når jeg har en property som "multiarray", overskrider jeg Microsofts design-regler; http://www.gotdotnet.com/team/fxcop/docs/rules.aspx?version=1.312&&url=/Performance/PropertiesShouldNotReturnArrays.html
Avatar billede arne_v Ekspert
07. januar 2005 - 11:50 #4
Jeg tror nu altså at du også i C# skal gøre det på den måde: ArrayList af ArrayList af Object,
hvis du vil undgå 2D arrayet.

(klassen hedder også ArrayList i C#, der er dog ikke en List, og Add er med stort)
Avatar billede dna Nybegynder
07. januar 2005 - 11:52 #5
cayman.. multiarrays og collections er jo bare datastrukturer, så hvis du ellers har ramt plet med Heidi´s problem, så kan de overvejelser jo godt bruges!

dna
Avatar billede heidi_j Nybegynder
07. januar 2005 - 12:24 #6
Jeg tror ikke helt jeg er med nu.

Hvis vi forestiller sig, at jeg vil bruge mit array til at bestemme dagen i et år,og sætte en markering der:

string[,] aar = new string[12,31]

// 15. august
aar[7,14] = "doh";
Avatar billede arne_v Ekspert
07. januar 2005 - 12:29 #7
((ArrayList)aar[7])[14] = "doh";

Det du burde gøre i det tilfælde var nok at lave en wrapper klasse så du kan
undgå den grimme cast (i .NET 1.x).
Avatar billede heidi_j Nybegynder
07. januar 2005 - 12:37 #8
Jeg har lidt svært ved at se hvordan det skulle kunne virke, men det er nok bare mig der er skeptisk med to eksklusive objekter i et array - hvordan ville jeg kunne skabe en koordinat ud fra det....?

Men lad det da komme an på en prøve så... er staks tilbage ;)
Avatar billede heidi_j Nybegynder
07. januar 2005 - 13:20 #9
Nu flækkede jeg et eksempel sammen - ud fra det der står i jeres indlæg - tror jeg - selvom jeg ikke helt kan gennemskue det:

private void Page_Load(object sender, System.EventArgs e)
{
  ArrayList calendar = new ArrayList();
 
  calendar.Add(new ArrayList());
  calendar.Add(new ArrayList());
 
  ((ArrayList)calendar[7])[15] = "B";
  ((ArrayList)calendar[2])[15] = "C";

  for (int i = 0; i <= 12; i++)
  {
    for (int j = 0; i <= 31; i++)
    {
      Response.Write(j.ToString()+"-"+i.ToString()+": "+((ArrayList)calendar[i])[j]);
    }
  }
}

Men den brokker sig selvfølgelig da jeg forsøger at sætte en værdi uden for indekseringen...
Avatar billede heidi_j Nybegynder
07. januar 2005 - 13:37 #10
Jeg må have været lidt barcardi, da jeg skrev overstående:

Ny version, men virker stadig ikke:

private void Page_Load(object sender, System.EventArgs e)
{
  ArrayList calendar = new ArrayList(12);

  for (int i = 0; i <= 11; i++)
  {
    calendar.Add(new ArrayList(31));
  }

  ((ArrayList)calendar[7])[15] = "B";
  ((ArrayList)calendar[2])[15] = "C";
 
  for (int i = 0; i <= 11; i++)
  {
    for (int j = 0; i <= 30; i++)
    {
      Response.Write(j.ToString()+"-"+i.ToString()+": "+((ArrayList)calendar[i])[j]);
    }
  }
}
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
Kurser inden for grundlæggende programmering

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