Go Keyword range: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(38 intermediate revisions by the same user not shown)
Line 1: Line 1:
=Internal=
=Internal=
* [[Go_Language#range_keyword|Go Language]]
=Overview=
<code>range</code> can be used to iterated through [[Go_Channels#Iterative_Read_from_a_Channel|channels]].
=Iterating through Arrays=
{{Internal|Go_Arrays#Iterating_though_Arrays|Iterating though Arrays}}
=Iterating through Slices=
{{Internal|Go_Slices#Iterating_through_Slices|Iterating through Slices}}
=Iterating over Map Keys and Values=
{{Internal|Go_Maps#Iterating_over_a_Map|Iterating over Map Keys and Values}}
=TO PROCESS=
<font color=darkkhaki>
==Internal==


* [[Go_Concepts_-_Lexical_Structure#Keywords|Keywords]]
* <tt>[[Go for#for_Controlled_by_a_.22range.22_Clause|for]]</tt>
* <tt>[[Go for#for_Controlled_by_a_.22range.22_Clause|for]]</tt>
* [[Go Channels|Channels]]


=Overview=
==Overview==


<tt>range</tt> keyword is used to iterate over arrays, slices, maps and [[Go_Concepts_-_Functions#Varidic_Functions|variadic function arguments]]. It returns two values. On the first position is the index/kyes, and the second position is the value.  
<tt>range</tt> keyword is used to iterate over strings, [[Go_Arrays#Iterating_over_Arrays|arrays]], [[Go_Slices#Iterating_over_Slices|slices]], [[Go_Maps#Iterating_over_Maps|maps]], channels and [[Go_Concepts_-_Functions#Varidic_Functions|variadic function arguments]]. It returns two values. On the first position is the index/key, and on the second position is the ''copy'' of the value in that element. For slices and arrays, <tt>range</tt> always starts to iterate from index 0. If you need more control over the start index, use a <tt>[[Go_for#Iterating_over_a_slice_from_a_non-zero_index|for]]</tt> loop.


<blockquote style="background-color: Gold; border: solid thin Goldenrod;">
<blockquote style="background-color: Gold; border: solid thin Goldenrod;">
:Note that only a first identifier is declared, that is the ''index'' and not the value, as the intuition would suggest. See examples below:<br>
:Note 1: that only a first identifier is declared, that is the ''index'' and not the value, as the intuition would suggest. See examples below.<br>
</blockquote>
</blockquote>


=Iterating over Indices=
<blockquote style="background-color: Gold; border: solid thin Goldenrod;">
 
:Note 2: <tt>range</tt> returns a ''copy'' of the value, in the same way it would pass an argument to a function. It does NOT return a reference to the element in the structure it iterates over.<br>
<pre>
</blockquote>
var a [5]int
for i := range a {
  // i is the index
}
</pre>


=Iterating over Values=
==Iterating over Key/Values in a Map==


<pre>
<pre>
var a [5]int
m := map[string]string {
for _, value := range a {
    "k1": "v1",
  // 'value' is the value
    "k2": "v2",
    "k3": "v3",
}
}
</pre>


=Iterating over Indices and Values=
for key, value := range m {
 
    //  
<pre>
var a [5]int
for _, value := range a {
  // value is the value
}
}
</pre>
</pre>

Latest revision as of 00:00, 27 August 2024

Internal

Overview

range can be used to iterated through channels.

Iterating through Arrays

Iterating though Arrays

Iterating through Slices

Iterating through Slices

Iterating over Map Keys and Values

Iterating over Map Keys and Values

TO PROCESS

Internal

Overview

range keyword is used to iterate over strings, arrays, slices, maps, channels and variadic function arguments. It returns two values. On the first position is the index/key, and on the second position is the copy of the value in that element. For slices and arrays, range always starts to iterate from index 0. If you need more control over the start index, use a for loop.

Note 1: that only a first identifier is declared, that is the index and not the value, as the intuition would suggest. See examples below.
Note 2: range returns a copy of the value, in the same way it would pass an argument to a function. It does NOT return a reference to the element in the structure it iterates over.

Iterating over Key/Values in a Map

m := map[string]string { 
    "k1": "v1",
    "k2": "v2",
    "k3": "v3",
}

for key, value := range m {
    // 
}