Difference between revisions of "NO/Documentation/BASIC Guide/Arrays"
(Created page with '{{NO/Documentation/BASICGuideTOC/v2 |ShowPrevNext=block |ShowPrevPage=block |PrevPage=NO/Documentation/BASIC Guide/Date |NextPage=NO/Documentation/BASIC Guide/Scope of Variables …') |
m |
||
| Line 12: | Line 12: | ||
et visst antall rader. Vil en ha to tabeller med 100 rader deklareres de | et visst antall rader. Vil en ha to tabeller med 100 rader deklareres de | ||
eksplisitt med | eksplisitt med | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Dim kundenummer(99) as Integer | Dim kundenummer(99) as Integer | ||
Dim kundenavn(99) | Dim kundenavn(99) | ||
kundenummer(14) = 354 | kundenummer(14) = 354 | ||
kundenavn(14) = "Jon Jonsen" | kundenavn(14) = "Jon Jonsen" | ||
| − | </ | + | </syntaxhighlight> |
Av eksemplet ser en | Av eksemplet ser en | ||
*uten datatype (som for kundenavn) blir datatypen variant (vil variere etter hvordan den brukes). | *uten datatype (som for kundenavn) blir datatypen variant (vil variere etter hvordan den brukes). | ||
| Line 23: | Line 23: | ||
*hver plass i tabellen indekseres med sin posisjon: indeks 14 er den 15. plassen | *hver plass i tabellen indekseres med sin posisjon: indeks 14 er den 15. plassen | ||
Vil en ha andre yttergrenser (lower og upper bound) angis det innenfor parentesene: | Vil en ha andre yttergrenser (lower og upper bound) angis det innenfor parentesene: | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Dim oppsummering(1940 To 1945) As String | Dim oppsummering(1940 To 1945) As String | ||
Dim surhetsgrad(-10 To -5) As Double | Dim surhetsgrad(-10 To -5) As Double | ||
| − | </ | + | </syntaxhighlight> |
Begge tabellene vil ha seks plasser indeksert som | Begge tabellene vil ha seks plasser indeksert som | ||
oppsummering(1940), oppsummering(1941) ... oppsummering(1945). | oppsummering(1940), oppsummering(1941) ... oppsummering(1945). | ||
| Line 37: | Line 37: | ||
Hvis nederste grense (lower bound) ikke oppgis, blir den 0. | Hvis nederste grense (lower bound) ikke oppgis, blir den 0. | ||
Noen mener at den skal starte med 1, og kan da gi direktivet | Noen mener at den skal starte med 1, og kan da gi direktivet | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Option Base 1 | Option Base 1 | ||
| − | </ | + | </syntaxhighlight> |
Dette er en spesialitet arvet fra VBA og anbefales ikke, | Dette er en spesialitet arvet fra VBA og anbefales ikke, | ||
da de fleste språk starter med 0 som nederste grense. | da de fleste språk starter med 0 som nederste grense. | ||
| Line 47: | Line 47: | ||
===Flere dimensjoner=== | ===Flere dimensjoner=== | ||
Skal en ha flere dimensjoner angis det innenfor parentesene i en implisitt deklarasjon, som: | Skal en ha flere dimensjoner angis det innenfor parentesene i en implisitt deklarasjon, som: | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Dim a(3, 5) As Integer | Dim a(3, 5) As Integer | ||
Dim c(7,14,99) As Boolean | Dim c(7,14,99) As Boolean | ||
| − | </ | + | </syntaxhighlight> |
som for tabell "a" gir 4 rader (indeksert 0 til 3) og | som for tabell "a" gir 4 rader (indeksert 0 til 3) og | ||
6 kolonner (indeksert 0 til 5), tilsammen 24 data av typen Integer. | 6 kolonner (indeksert 0 til 5), tilsammen 24 data av typen Integer. | ||
| Line 60: | Line 60: | ||
lages et annet sted i minnet, | lages et annet sted i minnet, | ||
og (hvis en angir Preserve) blir det gamle innholdet kopiert dit (kan ta noe tid). | og (hvis en angir Preserve) blir det gamle innholdet kopiert dit (kan ta noe tid). | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Dim a(7) as Integer | Dim a(7) as Integer | ||
Dim skatt(200) as Double | Dim skatt(200) as Double | ||
| Line 66: | Line 66: | ||
ReDim a(10) As String ' utvidelse (ny type, intet preserveres) | ReDim a(10) As String ' utvidelse (ny type, intet preserveres) | ||
ReDim Preserve skatt(140) ' forminsking (ikke alt kan preserveres) | ReDim Preserve skatt(140) ' forminsking (ikke alt kan preserveres) | ||
| − | </ | + | </syntaxhighlight> |
Flerdimensjonale tabeller kan redimensjoneres likens. | Flerdimensjonale tabeller kan redimensjoneres likens. | ||
Vil en preservere, kan hverken antallet dimensjoner eller datatype forandres. | Vil en preservere, kan hverken antallet dimensjoner eller datatype forandres. | ||
| Line 73: | Line 73: | ||
Funksjonene LBound(a) og UBound(a) viser yttergrensene i dimensjon a (eller dimensjon 0 hvis | Funksjonene LBound(a) og UBound(a) viser yttergrensene i dimensjon a (eller dimensjon 0 hvis | ||
intet er angitt). For en tredimesjonal tabell (dimensjon 0, 1 og 2) blir dette | intet er angitt). For en tredimesjonal tabell (dimensjon 0, 1 og 2) blir dette | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Dim MyArray(10, 13 to 28) As Integer | Dim MyArray(10, 13 to 28) As Integer | ||
MsgBox(LBound(MyArray, 2)) ' viser 13 | MsgBox(LBound(MyArray, 2)) ' viser 13 | ||
MsgBox(UBound(MyArray, 2)) ' viser 28 | MsgBox(UBound(MyArray, 2)) ' viser 28 | ||
| − | </ | + | </syntaxhighlight> |
===Tomme tabeller=== | ===Tomme tabeller=== | ||
Vet man ikke plassbehovet lages en tom tabell som senere utvides | Vet man ikke plassbehovet lages en tom tabell som senere utvides | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Dim s() As String | Dim s() As String | ||
... finner ut at en trenger 14 plasser | ... finner ut at en trenger 14 plasser | ||
Redim s(13) As String | Redim s(13) As String | ||
| − | </ | + | </syntaxhighlight> |
En tom tabell vil ha -1 som "upper bound" mens "lower bound" er 0. | En tom tabell vil ha -1 som "upper bound" mens "lower bound" er 0. | ||
{{InterWiki Languages BasicGuide|articletitle=NO/Documentation/BASIC Guide/Arrays}} | {{InterWiki Languages BasicGuide|articletitle=NO/Documentation/BASIC Guide/Arrays}} | ||
{{PDL1}} | {{PDL1}} | ||
Latest revision as of 08:30, 9 June 2026
Tabeller lar en samle likense ting under samme navn, for eksempel hundre kundenummer,
der hvert er av typen Integer. De enkleste er en-dimensjonale med en kolonne og
et visst antall rader. Vil en ha to tabeller med 100 rader deklareres de
eksplisitt med
Dim kundenummer(99) as Integer
Dim kundenavn(99)
kundenummer(14) = 354
kundenavn(14) = "Jon Jonsen"
Av eksemplet ser en
- uten datatype (som for kundenavn) blir datatypen variant (vil variere etter hvordan den brukes).
- antallet plasser i tabellen indikeres innenfor parentesene: 0 er et "lower bound" og 99 er "upper bound", tilsammen 100 plasser.
- hver plass i tabellen indekseres med sin posisjon: indeks 14 er den 15. plassen
Vil en ha andre yttergrenser (lower og upper bound) angis det innenfor parentesene:
Dim oppsummering(1940 To 1945) As String
Dim surhetsgrad(-10 To -5) As Double
Begge tabellene vil ha seks plasser indeksert som oppsummering(1940), oppsummering(1941) ... oppsummering(1945). Den andre indekseres som surhetsgrad(-10), surhetsgrad(-9) ... surhetsgrad(-5).
En spesiell form for tabell er UNO-sekvenser (lister, samlinger) som brukes innen Apache OpenOffice API. Disse starter alltid med 0. Mer om disse (viktige) tabellene senere.
Hvis nederste grense (lower bound) ikke oppgis, blir den 0. Noen mener at den skal starte med 1, og kan da gi direktivet
Option Base 1
Dette er en spesialitet arvet fra VBA og anbefales ikke, da de fleste språk starter med 0 som nederste grense. Og, det har forvirrende effekter, som at Dim a(3) gir en tabell med feltene a(1), a(2), a(3) og a(4)!
Flere dimensjoner
Skal en ha flere dimensjoner angis det innenfor parentesene i en implisitt deklarasjon, som:
Dim a(3, 5) As Integer
Dim c(7,14,99) As Boolean
som for tabell "a" gir 4 rader (indeksert 0 til 3) og 6 kolonner (indeksert 0 til 5), tilsammen 24 data av typen Integer. Tabell "c" har 8*15*100 boolske data = 1200 boolske data som opptar 1200*2 = 2400 byte i minnet.
Redimensjonering
Vil en endre plassen brukes ReDim. En ny tabell med tilstrekkelig plass, lages et annet sted i minnet, og (hvis en angir Preserve) blir det gamle innholdet kopiert dit (kan ta noe tid).
Dim a(7) as Integer
Dim skatt(200) as Double
...
ReDim a(10) As String ' utvidelse (ny type, intet preserveres)
ReDim Preserve skatt(140) ' forminsking (ikke alt kan preserveres)
Flerdimensjonale tabeller kan redimensjoneres likens. Vil en preservere, kan hverken antallet dimensjoner eller datatype forandres.
Yttergrensene
Funksjonene LBound(a) og UBound(a) viser yttergrensene i dimensjon a (eller dimensjon 0 hvis intet er angitt). For en tredimesjonal tabell (dimensjon 0, 1 og 2) blir dette
Dim MyArray(10, 13 to 28) As Integer
MsgBox(LBound(MyArray, 2)) ' viser 13
MsgBox(UBound(MyArray, 2)) ' viser 28
Tomme tabeller
Vet man ikke plassbehovet lages en tom tabell som senere utvides
Dim s() As String
... finner ut at en trenger 14 plasser
Redim s(13) As String
En tom tabell vil ha -1 som "upper bound" mens "lower bound" er 0.
| Content on this page is licensed under the Public Documentation License (PDL). |