Man frågar en array vilket dess lägsta och högsta tillåtna index är för en dimension i en array. Hej Det är väl iofs lämpligare och vanligare med >Sedan behöver man inte ha ett ' innan i:et i next-raden... En For-Loop anropar bara värden en gång. Testa själv så får du se: Hej igen Det är onödigt med såna här evighetsdiskussioner, javisst, men detta är ju ett allmänt vedertaget faktum. >next på genom en inbyggd språkkonstuktion än genom att använda en kommentar. >Anledning är att det finns optimeringstips som säger att (Next i) suger mer än >Skulle vara intressant att jämföra metoderna. JAg får samma resultat med classer. De hämtar bara värdena en gång.Sv: LBound och UBound
T.ex.
<code>
Dim Data() As Byte
Data = "Hejsan"
Debug.print LBound(Data)
Debug.print UBound(Data)
</code>Sv: LBound och UBound
Avd NybörjarForum
LBound returnerar det absolut lägsta element som finns i en Array.(oftast noll(0))
Ubound " högsta "
Exempel:
Dim subscript As Long,i As Long
subscript = Ubound(MinArray)
For i = 0 To subscript
List1.AddItem MinArray(i)
Next 'i
/SvenSv: LBound och UBound
Dim i As Long
For i = LBound(MinArray) To UBound(MinArray)
List1.AddItem MinArray(i)
Next i
Sedan behöver man inte ha ett ' innan i:et i next-raden...Sv: LBound och UBound
Nähä och varför behöver jag inte det ? ' betyder remarks och dom gör jag precis så många jag vill.
Fö är din lösning ganska dålig. Varför skall jag kalla på en funktion
flera 1000 ggr om jag inte behöver,jag tänker på anropen till Lbound och Ubound.
Dålig optimering. Arrayen består av 60000 element , många onödiga anrop blir det.
/SvenSv: LBound och UBound
<code>
Function MinValue() As Long
Debug.Print "MinValue"
MinValue = 1
End Function
Function MaxValue() As Long
Debug.Print "MaxValue"
MaxValue = 100
End Function
Private Sub Command1_Click()
Dim Index As Long
For Index = MinValue To MaxValue
Debug.Print "Loop: " & Index
Next
End Sub
</code>Sv: LBound och UBound
mmmmmmmmmmmm.!! Tänker på alla optimerinstips man läst genom åren
tex så avrådes man för att skriva For i = 0 To List1.ListCount - 1
men det är kanske inte samma sak,faen vet, jag är inte övertygad.
Är Ni säkra att detta inte gäller nya vb.net ?
/SvenSv: LBound och UBound
Sedan tycker jag personligen att det känns vettigare att faktiskt markera vad det är man vill ta next på genom en inbyggd språkkonstuktion än genom att använda en kommentar.
Men det är mina åsikter...Sv: LBound och UBound
Anledning är att det finns optimeringstips som säger att (Next i) suger mer än
bara Next, för att då tillfredställa denna eventuella sanning använder jag
och kommer att framledes använda (Next 'i) , får jag det ?
Skulle vara intressant om du ville kommentera For i = 0 To List1.ListCount -1
eller For i = 0 To rs.RecordCount - 1
Kommentera alltid din kod.
/SvenSv: LBound och UBound
>bara Next, för att då tillfredställa denna eventuella sanning använder jag
>och kommer att framledes använda (Next 'i) , får jag det ?
Ja, naturligtvis får du det, och jag kände inte till den optimeringsdetaljen (även om det förefaller ganska orimligt). Skulle vara intressant att jämföra metoderna.
>Skulle vara intressant om du ville kommentera For i = 0 To List1.ListCount -1
>eller For i = 0 To rs.RecordCount - 1
Eftersom den övre gränsen alltid cachas så skulle det gälla samma sak där. Däremot så kollas det varje gång i en
Do While (villkor)
...
Loop
(eller motsvarande)
Det kan vara detta du menar...
>Kommentera alltid din kod.
Ja, men inte in absurdum...uppenbar kod behöver aldrig kommenteras.Sv: LBound och UBound
Vi gjorde det för något år sedan jag och Andreas mfl.
Vi kom fram till att Vi inte kunde se någon skillnad.
Sen är det ju så att man i VB:s början trodde på allt som stod i
VBJ (Visual Basic Journal),kollade gamla tidningar från 1995 framåt
hittade påståendet på flera ställe(Tech Tips).Beträffande det andra ListCount - 1
så påstår man detta med kraft, dvs man anropar en klass propertie.
Men Ert cache resonemang verkar bestickande.
Sven som gör som Indianerna, kör i gamla beprövade spår.Sv: LBound och UBound
Class: Class1
<code>
Public Property Get MinValue() As Long
MinValue = 1
Debug.Print "MinValue"
End Property
Public Property Get MaxValue() As Long
MaxValue = 10
Debug.Print "MaxValue"
End Property
</code>
Form: Form1
<code>
Private Sub Command1_Click()
Dim C As Class1
Dim Index As Long
Set C = New Class1
For Index = C.MinValue To C.MaxValue
Debug.Print "Loop: " & Index
Next
End Sub
</code>