Difference between revisions of "SubIndex"

Line 13: Line 13:
 
== Example==
 
== Example==
 
Let:
 
Let:
 
+
:<code>Variable A :=</code>
<code>Variable A :=</code>
+
:{| class="wikitable"
{| class="wikitable"
 
 
!! colspan="6" | I &#9654;
 
!! colspan="6" | I &#9654;
 
|-
 
|-
Line 34: Line 33:
  
 
Then:
 
Then:
 
+
:<code>SubIndex(A, 2, I) &rarr; 'c'</code>
<code>SubIndex(A, 2, I) &rarr; 'c'</code>
+
:<code>SubIndex(A, 3, I) &rarr; 'e'</code>
 
+
:<code>SubIndex(A, 6, I) &rarr; «null»</code>
<code>SubIndex(A, 3, I) &rarr; 'e'</code>
+
:<code>SubIndex(A, 1..5, I) &rarr; ['f', 'c', 'e', 'a', 'd']</code>
 
 
<code>SubIndex(A, 6, I) &rarr; «null»</code>
 
 
 
<code>SubIndex(A, 1..5, I) &rarr; ['f', 'c', 'e', 'a', 'd']</code>
 
 
 
  
 
== Details & More Examples ==
 
== Details & More Examples ==
Line 51: Line 45:
 
Define variable '''A''' as above and let:
 
Define variable '''A''' as above and let:
  
<code>Variable B :=</code>
+
:<code>Variable B :=</code>
{| class="wikitable"
+
:{| class="wikitable"
 
! !! colspan="6" | I &#9654;
 
! !! colspan="6" | I &#9654;
 
|-
 
|-
Line 80: Line 74:
 
|}
 
|}
  
<code>Variable C :=</code>
+
:<code>Variable C :=</code>
{| class="wikitable"
+
:{| class="wikitable"
 
!! colspan="5" | K &#9654;
 
!! colspan="5" | K &#9654;
 
|-
 
|-
Line 98: Line 92:
  
 
Then:
 
Then:
 
+
:<code>SubIndex(B, 2, I) &rarr;</code>  
<code>SubIndex(B, 2, I) &rarr;</code>  
+
:{| class="wikitable"
{| class="wikitable"
 
 
! colspan="2" |J &#9654;
 
! colspan="2" |J &#9654;
 
|-
 
|-
Line 110: Line 103:
 
|}
 
|}
  
<code>SubIndex(A, C, I) &rarr;</code>  
+
:<code>SubIndex(A, C, I) &rarr;</code>  
{| class="wikitable"
+
:{| class="wikitable"
 
! colspan="5" |K &#9654;
 
! colspan="5" |K &#9654;
 
|-
 
|-
Line 129: Line 122:
 
If «u» is an array of values,  in this case the variable '''C''', an array is returned:
 
If «u» is an array of values,  in this case the variable '''C''', an array is returned:
  
<code>SubIndex(B, C, I) &rarr;</code>
+
:<code>SubIndex(B, C, I) &rarr;</code>
{| class="wikitable"
+
:{| class="wikitable"
 
!
 
!
 
! colspan="6" | K &#9654;
 
! colspan="6" | K &#9654;
Line 145: Line 138:
  
 
===Example 2===
 
===Example 2===
The following example can be found in the [[User Guide Examples]].
+
The following example can be found in the [[User_guide_Examples_folder|User Guide Examples]].
  
 
Let:
 
Let:
 
+
:<code>Variable Car_prices :=</code>
<code>Variable Car_prices :=</code>
+
:{| class="wikitable"  
{| class="wikitable"  
 
 
! !! colspan="5" | Years &#9654;
 
! !! colspan="5" | Years &#9654;
 
|-
 
|-
Line 182: Line 174:
 
|}
 
|}
  
<code>Index Car_type := ['VW', 'Honda', 'BMW']</code>
+
:<code>Index Car_type := ['VW', 'Honda', 'BMW']</code>
  
 
Then:
 
Then:
 
+
:<code>SubIndex(Car_prices, 18K, Car_type) &rarr;</code>
<code>SubIndex(Car_prices, 18K, Car_type) &rarr;</code>
+
:{| class="wikitable"
{| class="wikitable"
 
 
! colspan="5" |Years &#9654;
 
! colspan="5" |Years &#9654;
 
|-
 
|-
Line 216: Line 207:
 
|}
 
|}
  
<code>SubIndex(Car_prices, [18K, 19K] Car_type) &rarr;</code>
+
:<code>SubIndex(Car_prices, [18K, 19K] Car_type) &rarr;</code>
{| class="wikitable"
+
:{| class="wikitable"
 
! colspan="5" |Years &#9654;
 
! colspan="5" |Years &#9654;
 
|-
 
|-
Line 238: Line 229:
 
|«null»
 
|«null»
 
|}
 
|}
 
  
 
== See Also ==
 
== See Also ==
 
* [[PositionInIndex]]
 
* [[PositionInIndex]]
 
* [[Subscript]]
 
* [[Subscript]]
*[[User Guide Examples]] / [[Media: Array Function Examples.ana | Array Function Examples.ana]] / Reducing Functions Module
+
*[[User_guide_Examples_folder|User Guide Examples]] / [[Media: Array Function Examples.ana | Array Function Examples.ana]] / Reducing Functions Module

Revision as of 22:26, 11 January 2016


SubIndex(a, u, i)

Returns the value of index «i» for which array «a» (indexed by «i») is equal to «u». If «u» does not occur in «a», returns Null. If «u» occurs more than once in «a», it returns the last value of «i» that is equal to «u». If «a» has index(es) in addition to «i», or if the value «u» is an array with other indexes, those indexes also appear in the result.

SubIndex is the inverse of SubScript. While SubScript maps from the index value to the array element, SubIndex maps from the array element to the index value. SubIndex is not as efficient as SubScript -- while SubScript makes use of a hash-table for constant-time associative lookup, SubIndex must search the array each time for the indicated value, which takes linear time relative to the size of the array.


Example

Let:

Variable A :=
I ▶
'a' 'b' 'c' 'd' 'e' 'f'
4 3 2 5 3 1

Then:

SubIndex(A, 2, I) → 'c'
SubIndex(A, 3, I) → 'e'
SubIndex(A, 6, I) → «null»
SubIndex(A, 1..5, I) → ['f', 'c', 'e', 'a', 'd']

Details & More Examples

Array abstraction

When «a» has more than one dimension, or «u» is an array, SubIndex array abstracts according to the standard rules of array abstraction. For example, when «a» contains an index other than «i», SubIndex is applied to each slice of that index, returning the position of «u» in the corresponding slice. When «u» contains an array of values, the position of each of those values in «a» is returned.

Example 1

Define variable A as above and let:

Variable B :=
I ▶
J ▼ 'a' 'b' 'c' 'd' 'e' 'f'
1 3 5 2 4 5 3
2 2 1 5 2 3 4
Variable C :=
K ▶
1 2 3 4 5
4 2 5 1 3

Then:

SubIndex(B, 2, I) →
J ▶
1 2
'c' 'd'
SubIndex(A, C, I) →
K ▶
1 2 3 4 5
'a' 'c' 'd' 'f' 'e'

If «u» is an array of values, in this case the variable C, an array is returned:

SubIndex(B, C, I) →
K ▶
J ▼ 1 2 3 4 5
1 'd' 'c' 'e' «null» 'f'
2 'f' 'd' 'c' 'd' 'e'

Example 2

The following example can be found in the User Guide Examples.

Let:

Variable Car_prices :=
Years ▶
Car_type ▼ 2005 2006 2007 2008 2009
VW $16,000 $17,000 $18,000 $19,000 $20,000
Honda $18,000 $19,000 $20,000 $22,000 $24,000
BMW $25,000 $26,000 $28,000 $30,000 $32,000
Index Car_type := ['VW', 'Honda', 'BMW']

Then:

SubIndex(Car_prices, 18K, Car_type) →
Years ▶
2005 2006 2007 2008 2009
Honda «null» VW «null» «null»

SubIndex(Car_prices, 18K, Years) →

Car_type ▶
VW Honda BMW
2007 2005 «null»
SubIndex(Car_prices, [18K, 19K] Car_type) →
Years ▶
2005 2006 2007 2008 2009
Honda «null» VW «null» «null»
«null» Honda «null» VW «null»

See Also

Comments


You are not allowed to post comments.