Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #196 Pass a sub-array

Given an integer array a of size n, pass the first, third, fifth and seventh, ... up to the m th element to a routine foo which sets all these elements to 42.

# @param a [Array<Integer>]
# 
# @return [Array<Integer>]
# 
def foo(a)
  a.fill(42)
end

foo(arry.select(&:odd?))

# For older versions of ruby:
# foo(arry.select { |x| x.odd? })
void Foo(out int element)
{
    element = 42;
}

for (int i = 0; i < m; i += 2)
{
    Foo(out a[i]);
}
import std.range;
void foo(Range)(Range r) {
	r.fill(42);
}

foo(a.indexed(iota(0,m,2)));
var a = List.filled(n,0);
foo(a.take(m).toList());
foo(List<int> a) {
  a.fillRange(0, a.length, 42);
}
! Caller:
  integer, dimension(n) :: a
  call foo(a(1:m:2))

! Callee:

  subroutine foo(a)
    integer, dimension(:), intent(inout) :: a
    a = 42
  end subroutine foo
fun foo(a : IntArray, idx: IntProgression) = 
  idx.forEach{ a[it] = 42 }
foo(a, 0 .. (m-1) step 2)
uses Math;
procedure foo(var L: Integer);
begin
  L := 42;
end;

begin
  for i := 0 to Min(m, n-1) do
    if not odd(i) then foo(a[i]);
end.
sub foo  {
    my ($A, @i) = @_;
    @$A[@i] = (42) x @i;
    return $A;
}
foo($A, grep { 0 == $_ % 2 } 0 .. $m);
def foo(data, r):
    for i in r: data[i] = 42
    return

foo(a, range(0, m+1, 2))
fn foo(el: &mut i32) {
    *el = 42;
}
a.iter_mut().take(m).step_by(2).for_each(foo);
Imports System
Sub Foo(ByRef element As Integer)
    element = 42
End Sub

' Statements in caller:
For i = 0 To m - 1 Step 2
    Foo(a(i))
Next

New implementation...
< >
tkoenig