Difference between revisions of "Template:Smart lookup"

From QBWiki
Jump to navigation Jump to search
(Created page with "{{#vardefine:page|{{{1|Quick links lingo}}}}}{{#vardefine:index|{{{1|1}}}}}{{Add|index|1}}{{#if:{{{{#var:page}}|{{#var:index}}}} |{{{{#var:page}}|{{#var:index}}}} |{{#vardefin...")
 
m
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{#vardefine:page|{{{1|Quick links lingo}}}}}{{#vardefine:index|{{{1|1}}}}}{{Add|index|1}}{{#if:{{{{#var:page}}|{{#var:index}}}}
+
<includeonly>{{List lookup helper|{{{1}}}}}{{#vardefine:index|{{{2|1}}}}}<!--
|{{{{#var:page}}|{{#var:index}}}}
+
-->{{#ifexpr:{{#var:index}}<={{#var:length}}<!--
|{{#vardefine:minindex|{{#var:index}}}}{{#vardefine:maxindex|1}}<!--
+
if index is less than length of list, return immediately
just for fun, binary search for last list entry if out of bounds
+
-->|{{#var:entry_{{#var:index}}}}
-->{{#dowhile:
+
|{{#vardefine:adjusted_index|{{#expr:({{#var:index}} mod {{#var:length}})+1}}}}{{#ifexpr:{{#var:adjusted_index}}=0|{{#vardefine:adjusted_index|{{#var:index}}}}}}{{#var:entry_{{#var:adjusted_index}}}}
|{{#ifexpr:{{#var:maxindex}}+1<{{#var:minindex}}|continue}}
+
}}</includeonly><noinclude>{{Template doc|
|{{#if:{{{{#var:page}}|{{#var:index}}}}
+
Given a list and an index ''i'', return the (''i'' mod ''N'')-th entry in the list.
<!--undershoot-->|{{#ifexpr:{{#var:index}}>{{#var:maxindex}}|{{#vardefine:maxindex|{{#var:index}}}}}}
 
<!-- overshoot-->|{{#ifexpr:{{#var:index}}<{{#var:minindex}}|{{#vardefine:minindex|{{#var:index}}}}}}
 
}}
 
{{#vardefine:index|{{#expr:floor(({{#var:maxindex}}+{{#var:minindex}})/2)}}}}
 
}}{{#vardefine:adjusted_index|{{#expr:({{{1|1}}} mod {{#var:index}})}}}}{{#ifexpr:{{#var:adjusted_index}}=0|{{#vardefine:adjusted_index|{{#var:index}}}}}}{{{{#var:page}}|{{#var:adjusted_index}}}}
 
}}<noinclude>
 
  
1 - page with list
+
This behavior was originally extracted from [[Template:Quick links smart lingo|Quick links smart lingo]] and was refactored to use [[Template:List lookup helper|List lookup helper]].
 +
<pre>
 +
{{Smart lookup|QBWiki:Quick links/lingo|1}}
  
2 - index
+
{{Smart lookup|QBWiki:Quick links/lingo|99}}
 +
</pre>
  
When index i <= # of entries in list, return vlalue straight away. If i > #, it'll wrap around (mod #).
+
{{Smart lookup|QBWiki:Quick links/lingo|1}}
</noinclude>
+
 
 +
{{Smart lookup|QBWiki:Quick links/lingo|99}}
 +
}}</noinclude>

Latest revision as of 21:00, 14 December 2025

Template documentation

Given a list and an index i, return the (i mod N)-th entry in the list.

This behavior was originally extracted from Quick links smart lingo and was refactored to use List lookup helper.

{{Smart lookup|QBWiki:Quick links/lingo|1}}

{{Smart lookup|QBWiki:Quick links/lingo|99}}

Wondering why people keep saying "m"?

Heard something about the "canon"?