Difference between revisions of "GetAt - FormList"
Jump to navigation
Jump to search
imported>Tunaisafish (→Examples: Added binary search method) |
imported>JustinOther m (→Examples: Optimized examples per talk page/listed examples separately) |
||
Line 18: | Line 18: | ||
== Examples == | == Examples == | ||
<source lang="papyrus"> | *Print out the forms in the list | ||
<source lang="papyrus">Int iIndex = kFormList.GetSize() | |||
While iIndex > 0 | |||
iIndex -= 1 | |||
Debug.Trace("Form " + iIndex + " is " + kFormList.GetAt(iIndex)) | |||
EndWhile</source> | |||
EndWhile | |||
</source> | |||
<source lang="papyrus"> | *Get the index of member in list. Return -1 if member is not found. | ||
<source lang="papyrus">Int Function iGetFormIndex(FormList akList, Form akMember) Global | |||
If akList.HasForm(akMember) | |||
Int iIndex = akList.GetSize() ; Will always return a finite value | |||
While iIndex > 0 | |||
iIndex -= 1 | |||
If akList.GetAt(iIndex) == akMember | |||
Return iIndex | |||
EndIf | |||
EndWhile | |||
EndIf | |||
Return -1 ; Either the form is not in the list, is not currently loaded if non-persistent | |||
Return | EndFunction</source> | ||
EndFunction | * Search a LONG FormList of ORDERED FORMS (by FormID) and return. -1 if not found. Binary Search Method adapted to Papyrus from Wikipedia's [[http://en.wikipedia.org/wiki/Binary_search_algorithm#Deferred_detection_of_equality|deferred detection of equality]] example. | ||
</source> | <source lang="papyrus">Int Function GetFormIndexOrdered(FormList akList, Form akMember) Global | ||
Int Function GetFormIndexOrdered(FormList | |||
Int | Int iFormID = akMember.GetFormID() | ||
Int | Int iMin = 0 | ||
Int | Int iMax = akList.GetSize() - 1 | ||
While | While imax > iMin | ||
Int | Int iMid = (iMin + iMax) / 2 | ||
If | If iFormID > akList.GetAt(iMid).GetFormID() | ||
iMin = iMid + 1 | |||
Else | Else | ||
iMax = iMid | |||
EndIf | EndIf | ||
EndWhile | EndWhile | ||
If ( | If (iMax == iMin) && (iFormID == akList.GetAt(iMin).GetFormID()) | ||
Return | Return iMin | ||
Else | Else | ||
Return -1 | Return -1 | ||
EndIf | EndIf | ||
EndFunction | EndFunction</source> | ||
</source> | |||
== See Also == | == See Also == |
Revision as of 12:40, 12 October 2012
Member of: FormList Script
Returns the form at a specified index in the list.
Syntax
Form Function GetAt(int aiIndex) native
Parameters
- aiIndex: The index in the list we want to fetch the form from
- The index is 0-based. If a list has 3 items in it, valid indices are: 0, 1 and 2
Return Value
Returns the form at index aiIndex, none in case of error (such as wrong index value)
Examples
- Print out the forms in the list
Int iIndex = kFormList.GetSize()
While iIndex > 0
iIndex -= 1
Debug.Trace("Form " + iIndex + " is " + kFormList.GetAt(iIndex))
EndWhile
- Get the index of member in list. Return -1 if member is not found.
Int Function iGetFormIndex(FormList akList, Form akMember) Global
If akList.HasForm(akMember)
Int iIndex = akList.GetSize() ; Will always return a finite value
While iIndex > 0
iIndex -= 1
If akList.GetAt(iIndex) == akMember
Return iIndex
EndIf
EndWhile
EndIf
Return -1 ; Either the form is not in the list, is not currently loaded if non-persistent
EndFunction
- Search a LONG FormList of ORDERED FORMS (by FormID) and return. -1 if not found. Binary Search Method adapted to Papyrus from Wikipedia's [detection of equality] example.
Int Function GetFormIndexOrdered(FormList akList, Form akMember) Global
Int iFormID = akMember.GetFormID()
Int iMin = 0
Int iMax = akList.GetSize() - 1
While imax > iMin
Int iMid = (iMin + iMax) / 2
If iFormID > akList.GetAt(iMid).GetFormID()
iMin = iMid + 1
Else
iMax = iMid
EndIf
EndWhile
If (iMax == iMin) && (iFormID == akList.GetAt(iMin).GetFormID())
Return iMin
Else
Return -1
EndIf
EndFunction