Filter: Difference between revisions
→{{header|langur}}
No edit summary |
Langurmonkey (talk | contribs) |
||
(44 intermediate revisions by 26 users not shown) | |||
Line 14:
=={{header|11l}}==
<
V even = array.filter(n -> n % 2 == 0)
print(even)</
{{out}}
<pre>
[2, 4, 6, 8, 10]
</pre>
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits <br> or android 64 bits with application Termux }}
<syntaxhighlight lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program filterdes64.s */
/************************************/
/* Constantes */
/************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
/************************************/
/* Initialized data */
/************************************/
.data
szMessResult: .asciz "Start array : "
szMessResultFil: .asciz "Filter array : "
szMessResultdest: .asciz "Same array : "
szMessStart: .asciz "Program 64 bits start.\n"
szCarriageReturn: .asciz "\n"
szFiller: .asciz " "
.align 4
arrayNumber: .quad 1,2,3,4,5,6,7,8,9,10
.equ LGARRAY, (. - arrayNumber) / 8
/************************************/
/* UnInitialized data */
/************************************/
.bss
.align 4
arrayNumberFil: .skip 8 * LGARRAY // result array
sZoneConv: .skip 24
/************************************/
/* code section */
/************************************/
.text
.global main
main:
ldr x0,qAdrszMessStart // display start message
bl affichageMess
ldr x0,qAdrszMessResult // display message
bl affichageMess
ldr x5,qAdrarrayNumber // start array address
mov x4,#0 // index
1:
ldr x0,[x5,x4,lsl #3] // load a value
ldr x1,qAdrsZoneConv
bl conversion10 // décimal conversion
ldr x0,qAdrsZoneConv
bl affichageMess // display value
ldr x0,qAdrszFiller
bl affichageMess
add x4,x4,#1 // increment index
cmp x4,#LGARRAY // end array ?
blt 1b // no -> loop
ldr x0,qAdrszCarriageReturn
bl affichageMess
ldr x6,qAdrarrayNumberFil // adrress result array
mov x4,#0 // index
mov x3,#0 // index result
2:
ldr x0,[x5,x4,lsl #3] // load a value
tst x0,#1 // odd ?
bne 3f
str x0,[x6,x3,lsl #3] // no -> store in result array
add x3,x3,#1 // and increment result index
3:
add x4,x4,#1 // increment array index
cmp x4,#LGARRAY // end ?
blt 2b // no -> loop
ldr x0,qAdrszMessResultFil
bl affichageMess
mov x4,#0 // init index
4: // display filter result array
ldr x0,[x6,x4,lsl #3]
ldr x1,qAdrsZoneConv
bl conversion10
ldr x0,qAdrsZoneConv
bl affichageMess
ldr x0,qAdrszFiller
bl affichageMess
add x4,x4,#1
cmp x4,x3
blt 4b
ldr x0,qAdrszCarriageReturn
bl affichageMess
// array destruction
mov x4,#0 // index
mov x3,#0 // index result
5:
ldr x0,[x5,x4,lsl #3] // load a value
tst x0,#1 // odd ?
bne 7f
cmp x3,x4 // index = no store
beq 6f
str x0,[x5,x3,lsl #3] // store in free item on same array
6:
add x3,x3,#1 // and increment result index
7:
add x4,x4,#1 // increment array index
cmp x4,#LGARRAY // end ?
blt 5b // no -> loop
ldr x0,qAdrszMessResultdest
bl affichageMess
mov x4,#0 // init index
8: // display array
ldr x0,[x5,x4,lsl #3]
ldr x1,qAdrsZoneConv
bl conversion10
ldr x0,qAdrsZoneConv
bl affichageMess
ldr x0,qAdrszFiller
bl affichageMess
add x4,x4,#1
cmp x4,x3
blt 8b
ldr x0,qAdrszCarriageReturn
bl affichageMess
100: // standard end of the program
mov x0, #0 // return code
mov x8, #EXIT // request to exit program
svc 0 // perform the system call
qAdrszCarriageReturn: .quad szCarriageReturn
qAdrszMessStart: .quad szMessStart
qAdrarrayNumber: .quad arrayNumber
qAdrszMessResult: .quad szMessResult
qAdrarrayNumberFil: .quad arrayNumberFil
qAdrszMessResultFil: .quad szMessResultFil
qAdrszMessResultdest: .quad szMessResultdest
qAdrsZoneConv: .quad sZoneConv
qAdrszFiller: .quad szFiller
/***************************************************/
/* ROUTINES INCLUDE */
/***************************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeARM64.inc"
</syntaxhighlight>
{{Out}}
<pre>
Program 64 bits start.
Start array : 1 2 3 4 5 6 7 8 9 10
Filter array : 2 4 6 8 10
Same array : 2 4 6 8 10
</pre>
=={{header|ACL2}}==
<
(cond ((endp xs) nil)
((evenp (first xs))
(cons (first xs) (filter-evens (rest xs))))
(t (filter-evens (rest xs)))))</
=={{header|Action!}}==
<
INT value ;used in predicate
Line 138 ⟶ 293:
PrintE("Select all non negative numbers:")
PrintArray(src,srcSize)
RETURN</
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Filter.png Screenshot from Atari 8-bit computer]
Line 162 ⟶ 317:
=={{header|ActionScript}}==
<
var evens:Array = new Array();
for (var i:int = 0; i < arr.length(); i++) {
if (arr[i] % 2 == 0)
evens.push(arr[i]);
}</
'''Actionscript 3'''
<
arr = arr.filter(function(item:int, index:int, array:Array) {
return item % 2 == 0;
});
</syntaxhighlight>
=={{header|Ada}}==
<
with Ada.Text_Io; use Ada.Text_Io;
Line 208 ⟶ 363:
begin
Print(Evens(Foo));
end Array_Selection;</
Here is a non-recursive solution:
<
procedure Array_Selection is
Line 237 ⟶ 392:
Put (Evens ((1,2,3,4,5,6,7,8,9,10)));
New_Line;
end Array_Selection;</
=={{header|Aime}}==
<
even(integer e)
{
Line 290 ⟶ 445:
return 0;
}</
{{out}}
<pre> 0 2 4 6 8</pre>
Line 298 ⟶ 453:
{{works with|ALGOL 68G|Any - tested with release mk15-0.8b.fc9.i386}}
{{works with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release 1.8.8d.fc9.i386}}
<
PROC select = ([]TYPE from, PROC(TYPE)BOOL where)[]TYPE:
Line 320 ⟶ 475:
# Or as a simple one line query #
print((select((1,4,9,16,25,36,49,64,81,100), (TYPE x)BOOL: NOT ODD x ), new line))</
{{out}}
<pre>
Line 331 ⟶ 486:
In the sample below, the ''select'' procedure's parameters do not include the parameters of ''where'' - they are commented out.<br>
Recent compilers (such as Awe) require the parameter types be specified and so the parameters to ''where'' should be uncommented when compilling with Awe.
<
% sets the elements of out to the elements of in that return true from applying the where procedure to them %
% the bounds of in must be 1 :: inUb - out must be at least as big as in and the number of matching %
Line 357 ⟶ 512:
write()
end.
</syntaxhighlight>
{{out}}
<pre>
Line 364 ⟶ 519:
=={{header|AmigaE}}==
<
DEF l : PTR TO LONG, r : PTR TO LONG, x
l := [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Line 370 ⟶ 525:
SelectList({x}, l, r, `Mod(x,2)=0)
ForAll({x}, r, `WriteF('\d\n', x))
ENDPROC</
=={{header|AntLang}}==
<
{1- x mod 2}hfilter x</
=={{header|Apex}}==
<
Set<Integer> evenIntegers = new Set<Integer>();
for(Integer i : integers)
Line 391 ⟶ 546:
system.assert(!evenIntegers.contains(3), '3 should not be a number in the set');
system.assert(evenIntegers.contains(4), '4 should be a number in the set');
system.assert(!evenIntegers.contains(5), '5 should not be a number in the set');</
=={{header|APL}}==
<
2 4 6 8 10 12 14 16 18 20</
=={{header|AppleScript}}==
<
set evens to {}
repeat with i in array
if (i mod 2 = 0) then set end of evens to i's contents
end repeat
return evens</
Here's how you might implement a more generic filter, passing a script object to represent the test that elements must pass (obviously overkill for this simple example):
<
set outList to {}
repeat with anItem in inList
Line 423 ⟶ 578:
end script
filter({1,2,3,4,5,6}, isEven)</
Line 435 ⟶ 590:
This allows for context-sensitive filters, which can take account of following or preceding elements in a sequence.
<
-- filter :: (a -> Bool) -> [a] -> [a]
Line 477 ⟶ 632:
end script
end if
end mReturn</
{{Out}}
<pre>{0, 2, 4, 6, 8, 10}</pre>
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi <br> or android 32 bits with application Termux}}
<syntaxhighlight lang ARM Assembly>
/* ARM assembly Raspberry PI */
/* program filterdes.s */
/************************************/
/* Constantes */
/************************************/
/* for constantes see task include a file in arm assembly */
.include "../constantes.inc"
/************************************/
/* Initialized data */
/************************************/
.data
szMessResult: .asciz "Start array : "
szMessResultFil: .asciz "Filter array : "
szMessResultdest: .asciz "Same array : "
szMessStart: .asciz "Program 32 bits start.\n"
szCarriageReturn: .asciz "\n"
.align 4
arrayNumber: .int 1,2,3,4,5,6,7,8,9,10
.equ LGARRAY, (. - arrayNumber) / 4
/************************************/
/* UnInitialized data */
/************************************/
.bss
.align 4
arrayNumberFil: .skip 4 * LGARRAY @ result array
sZoneConv: .skip 24
/************************************/
/* code section */
/************************************/
.text
.global main
main:
ldr r0,iAdrszMessStart @ display start message
bl affichageMess
ldr r0,iAdrszMessResult @ display message
bl affichageMess
ldr r5,iAdrarrayNumber @ start array address
mov r4,#0 @ index
1:
ldr r0,[r5,r4,lsl #2] @ load a value
ldr r1,iAdrsZoneConv
bl conversion10 @ décimal conversion
add r1,r1,r0 @ compute address end number
add r1,#2 @ add two characters
mov r0,#0 @ for limit the size of display number
strb r0,[r1] @ to store a final zero
ldr r0,iAdrsZoneConv
bl affichageMess @ display value
add r4,r4,#1 @ increment index
cmp r4,#LGARRAY @ end array ?
blt 1b @ no -> loop
ldr r0,iAdrszCarriageReturn
bl affichageMess
ldr r6,iAdrarrayNumberFil @ adrress result array
mov r4,#0 @ index
mov r3,#0 @ index result
2:
ldr r0,[r5,r4,lsl #2] @ load a value
tst r0,#1 @ odd ?
streq r0,[r6,r3,lsl #2] @ no -> store in result array
addeq r3,r3,#1 @ and increment result index
add r4,r4,#1 @ increment array index
cmp r4,#LGARRAY @ end ?
blt 2b @ no -> loop
ldr r0,iAdrszMessResultFil
bl affichageMess
mov r4,#0 @ init index
3: @ display filter result array
ldr r0,[r6,r4,lsl #2]
ldr r1,iAdrsZoneConv
bl conversion10
add r1,r1,r0
add r1,#2
mov r0,#0
strb r0,[r1]
ldr r0,iAdrsZoneConv
bl affichageMess
add r4,r4,#1
cmp r4,r3
blt 3b
ldr r0,iAdrszCarriageReturn
bl affichageMess
@ array destruction
mov r4,#0 @ index
mov r3,#0 @ index result
4:
ldr r0,[r5,r4,lsl #2] @ load a value
tst r0,#1 @ even ?
bne 6f
cmp r3,r4 @ index = no store
beq 5f
str r0,[r5,r3,lsl #2] @ store in free item on same array
5:
add r3,r3,#1 @ and increment result index
6:
add r4,r4,#1 @ increment array index
cmp r4,#LGARRAY @ end ?
blt 4b @ no -> loop
ldr r0,iAdrszMessResultdest
bl affichageMess
mov r4,#0 @ init index
7: @ display array
ldr r0,[r5,r4,lsl #2]
ldr r1,iAdrsZoneConv
bl conversion10
add r1,r1,r0
add r1,#2
mov r0,#0
strb r0,[r1]
ldr r0,iAdrsZoneConv
bl affichageMess
add r4,r4,#1
cmp r4,r3
blt 7b
ldr r0,iAdrszCarriageReturn
bl affichageMess
100: @ standard end of the program
mov r0, #0 @ return code
mov r7, #EXIT @ request to exit program
svc 0 @ perform the system call
iAdrszCarriageReturn: .int szCarriageReturn
iAdrszMessStart: .int szMessStart
iAdrarrayNumber: .int arrayNumber
iAdrszMessResult: .int szMessResult
iAdrarrayNumberFil: .int arrayNumberFil
iAdrszMessResultFil: .int szMessResultFil
iAdrszMessResultdest: .int szMessResultdest
iAdrsZoneConv: .int sZoneConv
/***************************************************/
/* ROUTINES INCLUDE */
/***************************************************/
/* for this file see task include a file in language ARM assembly*/
.include "../affichage.inc"
</syntaxhighlight>
{{Out}}
<pre>
Program 32 bits start.
Start array : 1 2 3 4 5 6 7 8 9 10
Filter array : 2 4 6 8 10
Same array : 2 4 6 8 10
</pre>
=={{header|Arturo}}==
<
print select arr [x][even? x]</
{{out}}
Line 491 ⟶ 802:
=={{header|AutoHotkey}}==
<
loop, parse, array, `,
{
Line 542 ⟶ 853:
</syntaxhighlight>
=={{header|AWK}}==
Line 550 ⟶ 861:
'''One-liner:'''
<
{{out}}
<pre>4 6 8 2</pre>
'''Regular script:'''
<
BEGIN {
split("1 2 3 4 5 6 7 8 9",a);
Line 561 ⟶ 872:
print r
}
</syntaxhighlight>
Same output.
=={{header|Batch File}}==
<
@echo off
setlocal enabledelayedexpansion
Line 624 ⟶ 935:
set /a length+=1
goto lengthloop
</syntaxhighlight>
{{out}}
<pre>
Line 636 ⟶ 947:
=={{header|BBC BASIC}}==
<
items% = 1000
DIM array%(items%)
Line 669 ⟶ 980:
END
DEF FNfilter(A%) = ((A% AND 1) = 0)</
=={{header|BCPL}}==
<
// Copy every value for which p(x) is true from in to out
Line 711 ⟶ 1,022:
writevec(arr, len)
wrch('*N')
$)</
{{out}}
<pre>Numbers: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Line 718 ⟶ 1,029:
=={{header|Bracmat}}==
<
& ( 1 2 3 4 5 6 7 8 9 10 16 25 36 49 64 81 100:? (=.!sjt*1/2:/&!odds !sjt:?odds)$() ()
| !odds
)
)
</syntaxhighlight>
<pre>1 3 5 7 9 25 49 81</pre>
=={{header|Brat}}==
<
p 1.to(10).select { x | x % 2 == 0 }</
=={{header|Burlesque}}==
<
blsq ) 1 13r@{2.%n!}f[
{2 4 6 8 10 12}
</syntaxhighlight>
=={{header|BQN}}==
Line 741 ⟶ 1,052:
General filtering is done using the <code>/</code>(Replicate) function, which can fliter elements given a bitmask. We can make a modifier based on it to accept a function for filtering.
<
Odd ← 2⊸|
Odd _filter 1‿2‿3‿4‿5</
<syntaxhighlight lang="text">⟨ 1 3 5 ⟩</
=={{header|C}}==
<
#include <stdlib.h>
Line 790 ⟶ 1,101:
return 0;
}</
{{out}}
<pre>Filtered even: 2 4 6 8 10
Line 797 ⟶ 1,108:
=={{header|C sharp|C#}}==
{{works with|.NET|1.1}}
<
ArrayList evens = new ArrayList();
foreach( int i in array )
Line 805 ⟶ 1,116:
}
foreach( int i in evens )
System.Console.WriteLine( i.ToString() );</
{{works with|.NET|2.0}}
<
List<int> evens = array.FindAll( delegate( int i ) { return (i%2)==0; } );
foreach( int i in evens )
System.Console.WriteLine( i.ToString() );</
{{works with|.NET|3.5}}
<
IEnumerable<int> evens = array.Where( delegate( int i ) { return (i%2)==0; } );
foreach( int i in evens )
System.Console.WriteLine( i.ToString() );</
Replacing the delegate with the more concise lambda expression syntax.
<
int[] evens = array.Where(i => (i % 2) == 0).ToArray();
foreach (int i in evens)
Console.WriteLine(i);</
=={{header|C++}}==
<
#include <algorithm>
#include <functional>
Line 842 ⟶ 1,153:
return 0;
}</
{{works with|C++11}}
<
#include <algorithm>
#include <iterator>
Line 862 ⟶ 1,173:
// print result
copy(evens.begin(), evens.end(), ostream_iterator<int>(cout, "\n"));
}</
=={{header|Clean}}==
The standard environment is required for list and array comprehensions. We specify the types of the functions because array comprehensions are overloaded. Clean provides lazy, strict, and unboxed arrays.
<
import StdEnv</
Create a lazy array where each element comes from the list 1 to 10.
<
array = {x \\ x <- [1 .. 10]}</
Create (and print) a strict array where each element (coming from another array) is even.
<
Start = {x \\ x <-: array | isEven x}</
=={{header|Clojure}}==
<
(filter even? (range 0 100))
;; vec will convert any type of seq to an array
(vec (filter even? (vec (range 0 100))))</
=={{header|CoffeeScript}}==
<
{{out}}
Line 903 ⟶ 1,214:
In this example, the goal is to find the even numbers. The most straight-forward function is to use remove-if-not, which removes elements from the list that does ''not'' pass the predicate. The predicate, in this case, tests to see if an element is even. Therefore, the remove-if-not acts like a filter:
<
> (2 4 6 8 10)</
However, this function is non-destructive, meaning the function creates a brand new list. This might be too prohibitive for very large lists.
Line 911 ⟶ 1,222:
There is a destructive version that modifies the list in-place:
<
> (2 4 6 8 10)</
=={{header|Cowgol}}==
<
# Cowgol has strict typing and there are no templates either.
Line 986 ⟶ 1,297:
i := i + 1;
end loop;
print_nl();</
{{out}}
<pre>2 4 6 8 10
Line 992 ⟶ 1,303:
=={{header|D}}==
<
import std.algorithm: filter, equal;
Line 998 ⟶ 1,309:
auto evens = data.filter!(x => x % 2 == 0); // Lazy.
assert(evens.equal([2, 4, 6, 8, 10]));
}</
===Tango Version===
{{libheader|Tango}}
<
void main() {
Line 1,010 ⟶ 1,321:
Stdout("Evens - ")( array[0 .. evens] ).newline; // The order of even elements is preserved
Stdout("Odds - ")( array[evens .. $].sort ).newline; // Unlike odd elements
}</
{{out}}
<pre> Evens - [ 2, 4, 6, 8, 10 ]
Line 1,017 ⟶ 1,328:
=={{header|Delphi}}==
===Hand-coded version===
<
{$APPTYPE CONSOLE}
Line 1,041 ⟶ 1,352:
Write(i:3);
Writeln;
end.</
Line 1,050 ⟶ 1,361:
{{libheader| Types}}
{{libheader| Boost.Int}}
<
{$APPTYPE CONSOLE}
Line 1,085 ⟶ 1,396:
Writeln('[' + Source.Comma + ']');
End.
</syntaxhighlight>
{{out}}
Line 1,096 ⟶ 1,407:
===Non-destructively===
<
var arr = []
for x in this when pred(x) {
Line 1,105 ⟶ 1,416:
var arr = [1..20].Filter(x => x % 2 == 0)
print(arr)</
{{out}}
Line 1,112 ⟶ 1,423:
===Destructively===
<
var i = 0
while i < this.Length() {
Line 1,124 ⟶ 1,435:
var arr = [1..20]
arr.Filter(x => x % 2 == 0)
print(arr)</
{{out}}
Line 1,134 ⟶ 1,445:
Idiomatic approach in Dy is to use non-strict iterators (which can be combined without intermedate data structures) and translate the result to an array if needed:
<syntaxhighlight lang="dyalect">var xs = [1..20]
var arr = xs.Iterate().Filter(x => x % 2 == 0).Map(x => x.ToString())
print(arr.ToArray())</syntaxhighlight>
{{out}}
Line 1,157 ⟶ 1,456:
===Non-destructively===
<
]
for value in copy lst:
Line 1,167 ⟶ 1,466:
= 0 % x 2
!. filter @even [ 0 1 2 3 4 5 6 7 8 9 ]</
{{out}}
Line 1,174 ⟶ 1,473:
===Destructively===
<
filter-destructively pred lst:
Line 1,189 ⟶ 1,488:
filter-destructively @even lst
!. lst</
{{out}}
Line 1,199 ⟶ 1,498:
There are several ways this could be done.
<
accum [] for x ? (x %% 2 <=> 0) in [1,2,3,4,5,6,7,8,9,10] { _.with(x) }</
<
for x ? (x %% 2 <=> 0) in [1,2,3,4,5,6,7,8,9,10] {
result with= x
}
result</
<
makeSeries([1,2,3,4,5,6,7,8,9,10]).filter(fn x,_{x %% 2 <=> 0}).asList()</
=={{header|EasyLang}}==
<syntaxhighlight lang="text">
a[] = [ 1 2 3 4 5 6 7 8 9 ]
for i = 1 to len a[]
if a[i] mod 2 = 0
b[] &= a[i]
.
.
print b[]
</syntaxhighlight>
=={{header|EchoLisp}}==
<
(iota 12) → { 0 1 2 3 4 5 6 7 8 9 10 11 }
Line 1,240 ⟶ 1,541:
→ (0 2 4 6 8 10 12 14 16 18 20 22)
</syntaxhighlight>
=={{header|Ela}}==
Line 1,246 ⟶ 1,547:
===Using higher-order function (non-strict version)===
<
evenList = filter' (\x -> x % 2 == 0) [1..]</
===Using comprehension (non-strict version)===
<
=={{header|Elena}}==
ELENA 5.0 :
<
import system'math;
import extensions;
Line 1,265 ⟶ 1,566:
auto array := new int[]{1,2,3,4,5};
var evens := array.filterBy::(n => n.mod
evens.forEach
}</
Using strong typed collections and extensions:
<
import system'routines'stex;
import system'math;
Line 1,280 ⟶ 1,581:
array
.filterBy::(int n => n.mod
.forEach::(int i){ console.printLine(i) }
}</
{{out}}
<pre>
Line 1,290 ⟶ 1,591:
=={{header|Elixir}}==
<
[1, 2, 3, 4, 5, 6, 7, 8, 9]
iex(11)> Enum.filter(numbers, fn x -> rem(x,2)==0 end)
[2, 4, 6, 8]
iex(12)> for x <- numbers, rem(x,2)==0, do: x # comprehension
[2, 4, 6, 8]</
=={{header|Emacs Lisp}}==
{{trans|Common_Lisp}}
<syntaxhighlight lang="lisp">
(seq-filter (lambda (x) (= (% x 2))) '(1 2 3 4 5 6 7 8 9 10))
</syntaxhighlight>
{{out}}
<pre>
(2 4 6 8 10)
</pre>
=={{header|EMal}}==
<syntaxhighlight lang="emal">
writeLine(range(1, 11).filter(<int i|i % 2 == 0))
</syntaxhighlight>
{{out}}
<pre>
[2,4,6,8,10]
</pre>
=={{header|Erlang}}==
<
EvenNumbers = lists:filter(fun (X) -> X rem 2 == 0 end, Numbers).</
Or using a list comprehension:
<
=={{header|Euphoria}}==
<
s = {1, 2, 3, 4, 5, 6}
evens = {}
Line 1,314 ⟶ 1,637:
end if
end for
? evens</
{{out}}
Line 1,321 ⟶ 1,644:
=={{header|F Sharp|F#}}==
<
List.filter (fun x -> x % 2 = 0) lst;;
val it : int list = [2; 4; 6]</
=={{header|Factor}}==
Line 1,330 ⟶ 1,653:
This code uses ''filter'' on an array.
<
! prints { 0 2 4 6 8 }</
''10 <iota>'' is already a sequence, so we can skip the conversion to array.
<
! prints V{ 0 2 4 5 8 }</
=== Destructive ===
This uses ''filter!'' to modify the original vector.
<
10 <iota> >vector [ even? ] filter! .
! prints V{ 0 2 4 5 8 }</
To prove that ''filter!'' is destructive but ''filter'' is non-destructive, I assign the original vector to ''v''.
<
10 <iota> >vector [| v |
v [ even? ] filter drop
Line 1,355 ⟶ 1,678:
] call
! V{ 0 1 2 3 4 5 6 7 8 9 } after filter
! V{ 0 2 4 6 8 } after filter!</
=={{header|Fantom}}==
<
class Main
{
Line 1,371 ⟶ 1,694:
}
}
</syntaxhighlight>
=={{header|Fe}}==
<syntaxhighlight lang="clojure">
(= filter (fn (f lst)
(let res (cons nil nil))
(let tail res)
(while lst
(let item (car lst))
(if (f item) (do
(setcdr tail (cons item nil))
(= tail (cdr tail))))
(= lst (cdr lst)))
(cdr res)))
(print (filter (fn (x) (< 5 x)) '(1 4 5 6 3 2 7 9 0 8)))
</syntaxhighlight>
Outputs:
<syntaxhighlight lang="clojure">
(6 7 9 8)
</syntaxhighlight>
=={{header|Forth}}==
<
cells over + swap do ( dest len test )
i @ over execute if
Line 1,389 ⟶ 1,732:
: even? ( n -- ? ) 1 and 0= ;
evens 0 ' even? nums 6 sel .array \ 2 4 6</
=={{header|Fortran}}==
<
implicit none
contains
Line 1,401 ⟶ 1,744:
iseven = mod(x, 2) == 0
end function iseven
end module funcs</
<
use funcs
implicit none
Line 1,445 ⟶ 1,788:
end function filterwith
end program Filter</
=={{header|FreeBASIC}}==
<
Type FilterType As Function(As Integer) As Boolean
Line 1,510 ⟶ 1,853:
End
Data 1, 2, 3, 7, 8, 10, 11, 16, 19, 21, 22, 27</
{{out}}
Line 1,520 ⟶ 1,863:
=={{header|Frink}}==
<
b = array[1 to 100]
c = select[b, {|x| x mod 2 == 0}]
</syntaxhighlight>
=={{header|Futhark}}==
{{incorrect|Futhark|Futhark's syntax has changed, so this example will not compile}}
<syntaxhighlight lang="futhark">
fun main(as: []int): []int =
filter (fn x => x%2 == 0) as
</syntaxhighlight>
=={{header|FutureBasic}}==
Even elements from array added to new array.
<syntaxhighlight lang="futurebasic">
include "NSLog.incl"
local fn EvenNumbersFromArrayToNewArray
CFArrayRef numbersArray = @[@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12]
PredicateRef isEvenPred = fn PredicateWithFormat( @"modulus:by:(SELF, 2) == 0" )
CFArrayRef evensArray = fn ArrayFilteredArrayUsingPredicate( numbersArray, isEvenPred )
NSLog( @"Array of odd and even numbers before sort:\n\t%@\n", numbersArray )
NSLog( @"New array of even numbers after sort:\n\t%@\n", evensArray )
end fn
fn EvenNumbersFromArrayToNewArray
NSLogScrollToTop
</syntaxhighlight>
Destructive version: Odd elemnts removed from mutable array.
<syntaxhighlight>
local fn OddNumbersRemovedFromArray
CFMutablearrayRef mutableNumbersArray = fn MutableArrayWithArray( @[@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12] )
NSLog( @"Mutable array of odd and even numbers before sort:\n\t%@\n", mutableNumbersArray )
PredicateRef isEvenPred = fn PredicateWithFormat( @"modulus:by:(SELF, 2) == 0" )
MutableArrayFilterUsingPredicate( mutableNumbersArray, isEvenPred )
NSLog( @"Mutable array with odd numbers removed:\n\t%@\n", mutableNumbersArray )
end fn
fn OddNumbersRemovedFromArray
NSLogScrollToTop
HandleEvents
</syntaxhighlight>
{{output}}
<pre style="height:20ex;">
Array of odd and even numbers before sort:
(
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12
)
New array of even numbers after sort:
(
2,
4,
6,
8,
10,
12
)
Mutable array of odd and even numbers before sort:
(
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12
)
Mutable array with odd numbers removed:
(
2,
4,
6,
8,
10,
12
)
</pre>
=={{header|Gambas}}==
'''[https://gambas-playground.proko.eu/?gist=e73bc5db1e3bb56c598f89aa669a0825 Click this link to run this code]'''
<
'______________________________________________________________________________________________________
Public Sub Main()
Line 1,577 ⟶ 2,009:
Print sRandom.join(",")
End</
Output:
<pre>
Line 1,586 ⟶ 2,018:
=={{header|GAP}}==
<
Filtered([1 .. 100], IsPrime);
Line 1,595 ⟶ 2,027:
Filtered([1 .. 10], IsOddInt);
# [ 1, 3, 5, 7, 9 ]</
=={{header|Go}}==
<
import (
Line 1,637 ⟶ 2,069:
}
*pa = a[:last]
}</
{{out}}
<pre>
Line 1,648 ⟶ 2,080:
=={{header|Groovy}}==
<
=={{header|Haskell}}==
Line 1,654 ⟶ 2,086:
In Haskell, a list is often more basic than an array:
<
evens = [x | x <- ary, even x]</
or
<
To do the same operation on an array, the simplest way it to convert it lazily into a list:
<
ary = listArray (1,10) [1..10]
evens = listArray (1,n) l where
n = length l
l = [x | x <- elems ary, even x]</
Note that the bounds must be known before creating the array, so the temporary list will be fully evaluated before the array is created.
=={{header|Icon}} and {{header|Unicon}}==
<
every put(A := [],1 to 10) # make a list of 1..10
Line 1,680 ⟶ 2,112:
procedure iseven(x) #: return x if x is even or fail
if x % 2 = 0 then return x
end</
=={{header|IDL}}==
The <tt>where()</tt> function can select elements on any logical expression. For example
<
=={{header|Insitux}}==
<syntaxhighlight lang="insitux">> (filter even? [0 1 2 3 4])
[0 2 4]
> (var x [0 1 2 3 4])
[0 1 2 3 4]
> (var! x (filter even?)) ;replaces variable x by applying implicit closure
[0 2 4]
</syntaxhighlight>
=={{header|J}}==
'''Solution:'''<br>
With any verb (function) <code>f</code> that returns a boolean for each element of a vector <code>v</code>, the following is the generic solution:
<
'''Examples:'''
<
63 92 51 92 39 15 43 89 36 69 40 16 23 2 29 91 57 43 55 22
v #~ -.2| v
92 92 36 40 16 2 22</
Or using the generic form suggested above:
<
(#~ isEven) v
92 92 36 40 16 2 22</
We might decide that we use this pattern so often that it is worthwhile creating a new adverb <code>select</code> that filters an array using the verb to its left.
<
isPrime=: 1&p:
Line 1,713 ⟶ 2,156:
43 89 23 2 29 43
(isEven *. isPrime) select v
2</
Destructive example:
<
(That said, note that in a highly parallel computing environment the destruction either happens after the filtering or you have to repeatedly stall the filtering to ensure that some sort of partially filtered result has coherency.)
=={{header|Jakt}}==
<syntaxhighlight lang="jakt">
fn filter<T>(anon array: [T], anon filter_function: fn(anon value: T) -> bool) throws -> [T] {
mut result: [T] = []
for value in array {
if filter_function(value) {
result.push(value)
}
}
return result
}
fn main() {
mut numbers: [i64] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let filtered = filter(numbers, fn(anon x: i64) -> bool => x % 2 == 0)
println("{}", filtered)
}
</syntaxhighlight>
=={{header|Java}}==
<
List<Integer> evensList = new ArrayList<Integer>();
for (int i: array) {
if (i % 2 == 0) evensList.add(i);
}
int[] evens = evensList.toArray(new int[0]);</
----
A Java 8 solution with stream and generic types:
<
return Arrays.stream(input)
.filter(filterMethod)
.toArray(size -> (T[]) Array.newInstance(input.getClass().getComponentType(), size));
}</
Methodcall:
<
Integer[] result = filter(array, i -> (i % 2) == 0);</
Warning: This solution works not with primitive types!<br/>
For arrays with a primitive type use the wrapper class.
=={{header|JavaFX Script}}==
<
def evens = array[n | n mod 2 == 0];</
=={{header|JavaScript}}==
===ES5===
The standard way is to use the [https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/filter Array.prototype.filter] function ({{works with|JavaScript|1.6}}):
<
var evens = arr.filter(function(a) {return a % 2 == 0});</
Other ways:
<
var evens = [];
for (var i=0, ilen=arr.length; i<ilen; i++)
if (arr[i] % 2 == 0)
evens.push(arr[i]);</
{{works with|Firefox|2.0}}
<
var evens = [i for (i in numbers) if (i % 2 == 0)];
Line 1,771 ⟶ 2,233:
}
var evens2 = [i for (i in range(100)) if (i % 2 == 0)];</
{{libheader|Functional}}
<
===ES6===
<
'use strict';
Line 1,791 ⟶ 2,253:
// [2, 4, 6, 8]
})();</
{{Out}}
<
=={{header|Joy}}==
<syntaxhighlight lang="joy">[1 2 3 4 5 6 7 8 9 10] [2 rem null] filter.</syntaxhighlight>
=={{header|jq}}==
jq's "select" filter is designed to make it easy to filter both arrays and streams:
<
{{Out}}
2
Line 1,804 ⟶ 2,269:
6
8
<syntaxhighlight lang="jq">
[range(1;10)] | map( select(. % 2 == 0) )
</syntaxhighlight>
{{Out}}
[2,4,6,8]
Line 1,813 ⟶ 2,278:
{{works with|Julia|0.6}}
<
{{out}}
Line 1,819 ⟶ 2,284:
=={{header|K}}==
<
even:{0=x!2}
even 1 2 3 4 5
Line 1,833 ⟶ 2,298:
45 5 79 77 44 15 83 88 33 99
evens a
44 88</
Alternative syntax:
<
{x[&even x]}</
Destructive:
<
44 88</
=={{header|Kotlin}}==
<
fun main(args: Array<String>) {
Line 1,856 ⟶ 2,321:
mutableList.retainAll { it % 2 == 0 }
println(mutableList.joinToString(" "))
}</
{{out}}
Line 1,867 ⟶ 2,332:
=={{header|Lambdatalk}}==
<
{def filter
{lambda {:bool :
{
else}}}
-> filter
{def even? {lambda {:
-> even?
{def odd? {lambda {:n} {if {= {% :n 2} 1} then :n else}}}
-> odd?
{filter even? {S.serie 1 20}}
Line 1,884 ⟶ 2,352:
-> 1 3 5 7 9 11 13 15 17 19
</syntaxhighlight>
=={{header|Lang}}==
Solution with isEven function:
<syntaxhighlight lang="lang">
&arr = fn.arrayGenerateFrom(fn.inc, 10)
fp.isEven = ($x) -> return parser.op($x % 2 === 0)
&filteredArr = fn.arrayFiltered(&arr, fp.isEven)
fn.println(&arr)
fn.println(&filteredArr)
</syntaxhighlight>
{{out}}
<pre>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[2, 4, 6, 8, 10]
</pre>
Solution with combinator functions:
<syntaxhighlight lang="lang">
&arr = fn.arrayGenerateFrom(fn.inc, 10)
&filteredArr = fn.arrayFiltered(&arr, fn.combC(fn.combX1(fn.conStrictEquals, fn.combC(fn.mod, 2)), 0))
fn.println(&arr)
fn.println(&filteredArr)
</syntaxhighlight>
{{out}}
<pre>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[2, 4, 6, 8, 10]
</pre>
=={{header|Lang5}}==
<
10 iota "2 % not" filter . "\n" .
# [ 0 2 4 6 8 ]</
=={{header|langur}}==
Using the
<syntaxhighlight lang="langur">val .list = series 7
writeln "
writeln "filtered: ",
</syntaxhighlight>
{{out}}
<pre>
filtered: [2, 4, 6]</pre>
=={{header|Lasso}}==
<
local(evens = (with item in #original where #item % 2 == 0 select #item) -> asstaticarray)
#evens</
<pre>staticarray(2, 4, 6, 8, 10)</pre>
Modifying the original array
<
with item in #original where #item % 2 != 0 do #original ->removeall(#item)
#original</
<pre>array(2, 4, 6, 8, 10)</pre>
=={{header|Liberty BASIC}}==
<
' to array1 counting matches as we go
dim array1(100)
Line 1,938 ⟶ 2,433:
for n=1 to count
print array2(n)
next</
=={{header|Lisaac}}==
<
a := ARRAY[INTEGER].create_with_capacity 10 lower 0;
b := ARRAY[INTEGER].create_with_capacity 10 lower 0;
Line 1,951 ⟶ 2,446:
b.add_last item;
};
};</
=={{header|Logo}}==
<
output equal? 0 modulo :n 2
end
show filter "even? [1 2 3 4] ; [2 4]
show filter [equal? 0 modulo ? 2] [1 2 3 4]</
=={{header|Lua}}==
<
local ret = {}
for i, v in ipairs(t) do
Line 1,972 ⟶ 2,467:
function even(a) return a % 2 == 0 end
print(unpack(filter({1, 2, 3, 4 ,5, 6, 7, 8, 9, 10}, even)))</
The destructive version is even simpler, since tables are passed by reference:
<
for i, v in ipairs(t) do
if not func(v) then table.remove(t, i) end
Line 1,986 ⟶ 2,481:
local values = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
filter(values, even)
print(unpack(values))</
=={{header|M2000 Interpreter}}==
===Using Filter for arrays===
<syntaxhighlight lang="m2000 interpreter">
Module Checkit {
Print (1,2,3,4,5,6,7,8)#filter(lambda ->number mod 2=0)
}
Checkit
</syntaxhighlight>
===Old style===
Line 2,008 ⟶ 2,503:
<syntaxhighlight lang="m2000 interpreter">
Module CheckIt {
Function GetEvenNumbers (A as array){
Line 2,060 ⟶ 2,555:
}
CheckIt
</syntaxhighlight>
=={{header|Maple}}==
<syntaxhighlight lang="maple">
evennum:=proc(nums::list(integer))
return select(x->type(x, even), nums);
end proc;
</syntaxhighlight>
=={{header|Mathematica}} / {{header|Wolfram Language}}==
Check for even integers:
<
gives:
<syntaxhighlight lang
To check also for approximate number (like 8.0 in the example above) a possible solution is:
<
gives:
<
notice that the function returns 8. not 8 (the dot indicates that it is a float number, not an integer).
=={{header|MATLAB}}==
<
evens = list( mod(list,2) == 0 );
end</
{{out}}
<
ans =
0 2 4 6 8 10</
=={{header|Maxima}}==
<
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
Line 2,102 ⟶ 2,597:
sublist(a, lambda([n], mod(n, 3) = 0));
[3, 6, 9, 12, 15, 18]</
=={{header|MAXScript}}==
<
newArr = for i in arr where (mod i 2 == 0) collect i</
=={{header|min}}==
{{works with|min|0.19.3}}
<
{{out}}
<pre>
Line 2,118 ⟶ 2,613:
=={{header|MiniScript}}==
We define a ''filter'' method on the list type that returns a new list containing elements filtered by the given function.
<
result = []
for item in self
Line 2,131 ⟶ 2,626:
nums = [1, 2, 3, 4, 5, 6, 7, 9, 12, 15, 18, 21]
print nums.filter(@isEven)</
The in-place version is simpler, and even allows the use of an unnamed filter function, defined right on the method call.
<
for i in range(self.len-1, 0)
if not f(self[i]) then self.remove i
Line 2,146 ⟶ 2,641:
end function
print nums</
=={{header|ML}}==
==={{header|Standard ML}}===
<
List.filter (fn x => x mod 2 = 0) ary</
==={{header|MLite}}===
MLite is similar to Standard ML, though '=>' becomes '=' and 'List.' is elided:
<
filter (fn x = x mod 2 = 0) ary;</
=={{header|MUMPS}}==
<
;NEW I,J,A,B - Not making new, so we can show the values
;Populate array A
Line 2,164 ⟶ 2,659:
;Move even numbers into B
SET J=0 FOR I=1:1:10 SET:A(I)#2=0 B($INCREMENT(J))=A(I)
QUIT</
Testing:<pre>WRITE
Line 2,187 ⟶ 2,682:
=={{header|Nemerle}}==
Lists have a built-in method for filtering:
<
def filtered = original.Filter(fun(n) {n % 2 == 0});
WriteLine($"$filtered");</
The following would work for arrays:
<
{
def b = $[x | x in a, (f(x))];
b.ToArray()
}</
=={{header|NetRexx}}==
<
options replace format comments java crossref symbols nobinary
numeric digits 5000
Line 2,261 ⟶ 2,756:
ry = Rexx[] clist.toArray(Rexx[clist.size()])
return ry
</syntaxhighlight>
{{out}}
<pre>
Line 2,278 ⟶ 2,773:
=={{header|NewLISP}}==
<
(2 4 6 8 10)
</syntaxhighlight>
=={{header|NGS}}==
<syntaxhighlight lang="ngs">F even(x:Int) x % 2 == 0
evens = Arr(1...10).filter(even)</syntaxhighlight>
=={{header|Nial}}==
<
=0 2 4 6 8 10</
=={{header|Nim}}==
<
let values = toSeq(0..9)
Line 2,305 ⟶ 2,805:
var v2 = toSeq(0..9)
v2.keepItIf(it mod 2 != 0)
echo "Odd values: ", v2</
{{out}}
Line 2,314 ⟶ 2,814:
=={{header|Objeck}}==
<
use Structure;
Line 2,334 ⟶ 2,834:
}
}
</syntaxhighlight>
=={{header|Objective-C}}==
{{works with|Cocoa|Mac OS X 10.6+}}
<
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:3],
Line 2,344 ⟶ 2,844:
[NSNumber numberWithInt:5], nil];
NSArray *evens = [numbers objectsAtIndexes:[numbers indexesOfObjectsPassingTest:
^BOOL(id obj, NSUInteger idx, BOOL *stop) { return [obj intValue] % 2 == 0; } ]];</
{{works with|Cocoa|Mac OS X 10.5+}}
<
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:3],
Line 2,353 ⟶ 2,853:
[NSNumber numberWithInt:5], nil];
NSPredicate *isEven = [NSPredicate predicateWithFormat:@"modulus:by:(SELF, 2) == 0"];
NSArray *evens = [numbers filteredArrayUsingPredicate:isEven];</
{{works with|GNUstep}}
<
@interface NSNumber ( ExtFunc )
Line 2,387 ⟶ 2,887:
[pool release];
return 0;
}</
=={{header|OCaml}}==
It is easier to do it with a list:
<
let even_lst = List.filter (fun x -> x mod 2 = 0) lst</
=={{header|Octave}}==
<
evennums = arr( mod(arr, 2) == 0 );
disp(evennums);</
=={{header|Oforth}}==
<syntaxhighlight lang
=={{header|Ol}}==
<
(filter even? '(1 2 3 4 5 6 7 8 9 10))
</syntaxhighlight>
=={{header|ooRexx}}==
<
a=.array~new
b=.array~new
Line 2,438 ⟶ 2,938:
Say 'Filtered values (destructive filtering):' a~makestring(line,' ')
Exit
filter: Return arg(1)//2=0</
{{out}}
<pre>Unfiltered values: 1412 2244 6778 4002 439 3335 5877 8273 7882 1469
Line 2,446 ⟶ 2,946:
=={{header|Oz}}==
It is easier to do it with a list:
<
Lst = [1 2 3 4 5]
LstEven = {Filter Lst IsEven}</
=={{header|PARI/GP}}==
{{PARI/GP select}}
<
select(iseven, [2, 3, 4, 5, 7, 8, 9, 11, 13, 16, 17])</
Or in anonymous form
<
=={{header|Pascal}}==
Line 2,464 ⟶ 2,964:
{{works with|Delphi}}<br>
{{works with|Turbo Pascal}}
<
numbers:array[0..9] of integer = (0,1,2,3,4,5,6,7,8,9);
Line 2,472 ⟶ 2,972:
writeln( 'The number ',numbers[x],' is odd.');
else
writeln( 'The number ',numbers[x],' is even.');</
The odd() function is a standard library function of pascal as is the function even().
Line 2,478 ⟶ 2,978:
=={{header|Peloton}}==
Fixed length English dialect
<
<@ DEFLST>evens</@>
<@ ENULSTLIT>numbers|
Line 2,485 ⟶ 2,985:
<@ LETLSTELTLST>evens|...</@>
</@>
</@></
=={{header|Perl}}==
<
my @even = grep { $_%2 == 0 } @a;</
=={{header|Phix}}==
{{libheader|Phix/basics}}
===basic task===
<!--<
<span style="color: #008080;">function</span> <span style="color: #000000;">even<span style="color: #0000FF;">(<span style="color: #004080;">integer</span> <span style="color: #000000;">i<span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">remainder<span style="color: #0000FF;">(<span style="color: #000000;">i<span style="color: #0000FF;">,<span style="color: #000000;">2<span style="color: #0000FF;">)<span style="color: #0000FF;">=<span style="color: #000000;">0</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #0000FF;">?<span style="color: #7060A8;">filter<span style="color: #0000FF;">(<span style="color: #7060A8;">tagset<span style="color: #0000FF;">(<span style="color: #000000;">10<span style="color: #0000FF;">)<span style="color: #0000FF;">,<span style="color: #000000;">even<span style="color: #0000FF;">)
<!--</
{{out}}
<pre>
Line 2,508 ⟶ 3,008:
The following discusses possible destructive/in situ behaviours (in excruciatingly painstaking detail). Phix is reference counted so the distinction between destructive and
non-destructive is somewhat subtle. The following code (builtin filter routine) acts both ways.
<!--<
<span style="color: #008080;">function</span> <span style="color: #000000;">even<span style="color: #0000FF;">(<span style="color: #004080;">integer</span> <span style="color: #000000;">i<span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">remainder<span style="color: #0000FF;">(<span style="color: #000000;">i<span style="color: #0000FF;">,<span style="color: #000000;">2<span style="color: #0000FF;">)<span style="color: #0000FF;">=<span style="color: #000000;">0</span>
Line 2,522 ⟶ 3,022:
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #000000;">main<span style="color: #0000FF;">(<span style="color: #0000FF;">)
<!--</
{{out}}
<pre>
Line 2,530 ⟶ 3,030:
</pre>
It will help to explain what is going on by looking at a couple of longhand (and greatly simplified) versions, first an explicitly non-destructive one
<!--<
<span style="color: #008080;">function</span> <span style="color: #000000;">lhnd_filter<span style="color: #0000FF;">(<span style="color: #004080;">sequence</span> <span style="color: #000000;">a<span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">fn<span style="color: #0000FF;">)</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{<span style="color: #0000FF;">}</span>
Line 2,540 ⟶ 3,040:
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function
<!--</
Clearly the above is non-destructive. It makes no attempt to modify a, but builds a new result, and it is fair to say that in some cases the above may be the fastest approach due to fewer reference count updates. However the following may or may not be destructive:
<!--<
<span style="color: #008080;">function</span> <span style="color: #000000;">lhd_filter<span style="color: #0000FF;">(<span style="color: #004080;">sequence</span> <span style="color: #000000;">a<span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">fn<span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">l</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
Line 2,564 ⟶ 3,064:
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #000000;">main<span style="color: #0000FF;">(<span style="color: #0000FF;">)
<!--</
In the t = lhd_filter(s) call, s is preserved because of copy-on-write semantics. Modifying a does not modify s, because it has a reference count of 2 the first attempt to modify it triggers copy-on-write and safely makes a top-level copy. In the s = lhd_filter(s) call however, s is automatically passed by reference, ie the local s is <no value> over the duration of the call and parameter a of lhd_filter() contains the only reference to the previous content of s, and no copy-on-write occurs. Technically modifying a is still not modifying s, but since it has a reference count of 1 it modifies the data that used to be referenced by s, and will again rsn, in situ.
Note: adding t = s before the s = lhd_filter(s) call would make it non-destructive again, as t must be preserved and there is now a reference count >1 on that data. Also note that automatic pass-by-reference only occurs for routine-local variables.
Line 2,573 ⟶ 3,073:
=={{header|PHL}}==
<
extern printf;
Line 2,583 ⟶ 3,083:
return 0;
]</
=={{header|PHP}}==
Using a standard loop
<
$evens = array();
foreach ($arr as $val){
if ($val % 2 == 0) $evens[] = $val);
}
print_r($evens);</
Using a filter function
<
$arr = range(1,5);
$evens = array_filter($arr, "is_even");
print_r($evens);</
=={{header|Picat}}==
List comprehension is probably the best way of filtering:
<syntaxhighlight lang="picat">[I : I in 1..20, I mod 2 == 0]</syntaxhighlight>
A more general version of filtering is to use <code>call/1</code> with a defined predicate (here <code>p/1</code>):
<syntaxhighlight lang="picat">go =>
L = 1..20,
A = filter(L,p).
p(N) => N mod 2 == 0.
filter(A,F) = [N : N in A, call(F,N)].</syntaxhighlight>
This general version might be slower since using <code>call/1</code> has some overhead.
=={{header|PicoLisp}}==
<
(1 2 3 4 5 6 7 8 9) )</
{{out}}
<pre>-> (2 4 6 8)</pre>
=={{header|PL/I}}==
<
filter_values: procedure options (main); /* 15 November 2013 */
declare a(20) fixed, b(*) fixed controlled;
Line 2,634 ⟶ 3,150:
end filter;
end filter_values;</
Results:
<pre>
Line 2,647 ⟶ 3,163:
Most natural solution in Pop11 would probably use list. Below we accumulate filtered elements on the stack and then allocate array for the result:
<
;;; satisfying pred
define filter_array(ar, pred);
Line 2,661 ⟶ 3,177:
;;; Use it
filter_array({1, 2, 3, 4, 5},
procedure(x); not(testbit(x, 0)); endprocedure) =></
=={{header|PostScript}}==
{{libheader|initlib}}
<
[1 2 3 4 5 6 7 8 9 10] {2 mod 0 eq} find
</syntaxhighlight>
=={{header|PowerShell}}==
<
$array | Where-Object { $_ % 2 -eq 0 }</
=={{header|Prolog}}==
===findall===
<
Usage:
<
E = [2, 4, 6, 8, 10]</
===Anonymous functions===
Works with SWI-Prolog and <b>module(lambda)</b> written by <b>Ulrich Neumerkel</b>, "lambda.pl" can be found there : http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/lambda.pl
<
true.
?- include((\X^(X mod 2 =:= 0)), [1,2,3,4,5,6,7,8,9], L).
L = [2,4,6,8].</
===filter and anonymous functions===
Works with SWI-Prolog and <b>module(lambda)</b> written by <b>Ulrich Neumerkel</b>, "lambda.pl" can be found there : http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/lambda.pl
<
%% filter(Pred, LstIn, LstOut)
Line 2,701 ⟶ 3,217:
filter(Pred, T, L1),
( call(Pred,H) -> L = [H|L1]; L = L1).
</syntaxhighlight>
Usage :
<
L = [2,4,6,8] .
</syntaxhighlight>
=={{header|PureBasic}}==
<
Dim Evens.i(0)
Line 2,734 ⟶ 3,250:
For i=0 To ArraySize(Evens())
Print(Str(Evens(i))+" ")
Next</
{{out}}
Line 2,746 ⟶ 3,262:
{{works with|Python|2.4}}
<
evens = [x for x in values if not x & 1]
ievens = (x for x in values if not x & 1) # lazy
# alternately but less idiomatic:
evens = filter(lambda x: not x & 1, values)</
Alternative using the slice syntax with its optional "stride" expression:
<
evens = values[::2]</
This works for all versions of Python (at least as far back as 1.5). Lists (arrays) can be "sliced" by indexing them with a range (lower and upper bounds). Thus mylist[1:9] evaluates into a list from the second item (excluding the first item which is mylist[0], of course) up to but not including the ninth item. In Python the expression mylist[:] is synonymous with mylist[0:len(mylist)] ... returning a copy of the complete list. also mylist[:x] returns the first x items from the list and negative numbers can be used such that mylist[-x:] returns the last x items from the list. The relatively obscure and optional stride expression can skip items and/or force the evaluation from the end of the list downward towards it's lower elements. Thus mylist[::-1] returns a reversed copy of the list, mylist[::2] returns all even elements, mylist[1::2] returns all odd elements, and so on.
Line 2,763 ⟶ 3,279:
One can also assign to a slice (of a list or other mutable indexed object. Thus the following:
<
values[::2] = [11,13,15,17,19]
print values
11, 1, 13, 3, 15, 5, 17, 7, 19, 9</
Or in functional terms, by descending generality and increasing brevity:
{{works with|Python|3}}
<
from functools import (reduce)
Line 2,865 ⟶ 3,381:
if __name__ == '__main__':
main()</
{{Out}}
<pre>By descending generality and increasing brevity:
Line 2,876 ⟶ 3,392:
=={{header|Quackery}}==
<
witheach
[ tuck over do iff
Line 2,887 ⟶ 3,403:
[] 10 times [ 10 random join ]
say "Ten arbitrary digits: " dup echo cr
say "Only the even digits: " only even echo cr</
{{out}}
Line 2,896 ⟶ 3,412:
===Destructively===
<
[ over i peek
over do if
Line 2,906 ⟶ 3,422:
[] 10 times [ i join ] shuffle
say "Ten shuffled digits: " dup echo cr
say "Less the odd digits: " without odd echo cr</
{{out}}
Line 2,914 ⟶ 3,430:
=={{header|Q}}==
<
=={{header|QBASIC}}==
{{works with|QBasic|1.1}}
{{works with|QuickBasic|4.x}}
{{works with|Visual Basic for DOS|1.0}}
{{works with|PDS|7.x}}
===Using two arrays===
This version uses two arrays.
<syntaxhighlight lang="qbasic">
' OPTION EXPLICIT
' Filter
' This program selects certain elements from an array into a new array in a generic way
' Var
' $DYNAMIC
TYPE regSub
aNum AS INTEGER
END TYPE
CONST Even = 2
CONST Uneven = 1
CONST cFile = "DUMMY$$$.$$$"
CONST False = 0, True = NOT False
DIM t AS INTEGER
DIM t2 AS INTEGER
DIM f AS INTEGER
DIM i AS INTEGER
DIM iFlag AS INTEGER
DIM iGetWhat AS INTEGER
DIM iArray%(1 TO 1)
DIM iArray2%(1 TO 1)
DIM rSub AS regSub
' Initialize vars
iFlag = False
f = FREEFILE
iGetWhat = Even
RANDOMIZE TIMER
t = INT(RND * 300) + 1
REDIM iArray%(1 TO t)
' Main program cycle
OPEN cFile FOR OUTPUT AS #f
CLOSE
OPEN cFile FOR RANDOM AS #f LEN = LEN(rSub)
CLS
PRINT "Select items in an array into a new array in a generic way."
PRINT "Base array:"
FOR i = 1 TO t
iArray%(i) = INT(RND * 2000) + 1
PRINT iArray%(i);
IF (iArray%(i) MOD 2) = 0 AND iGetWhat = Even THEN
iFlag = True
ELSEIF (iArray%(i) MOD 2) <> 0 AND iGetWhat = Uneven THEN
iFlag = True
END IF
IF iFlag THEN
rSub.aNum = iArray%(i)
PUT #f, , rSub
iFlag = False
END IF
NEXT i
' Redims the array
t2 = LOF(f) / LEN(rSub)
REDIM iArray2%(1 TO t2)
FOR i = 1 TO t2
GET #f, i, rSub
iArray2%(i) = rSub.aNum
NEXT i
CLOSE #f
KILL cFile
PRINT
' Shows the result
IF t2 > 0 THEN
PRINT "Selected items from the array (total:"; t2; "of"; t; "):"
FOR i = 1 TO t2
PRINT iArray2%(i);
NEXT i
END IF
PRINT
PRINT "End of program."
END</syntaxhighlight>
{{out}}
The output can change as the size of the base array and its values varies on each run.
<pre>
Select items in an array into a new array in a generic way.
Base array:
1426 770 1686 1472 385 1212 909 656 776 707 918 1646 1258 1406 887 42
Selected items from the array (total: 12 of 16 ):
1426 770 1686 1472 1212 656 776 918 1646 1258 1406 42
End of program.
</pre>
===Using one array===
Extra points: This version uses one array.
<syntaxhighlight lang="qbasic">
' OPTION EXPLICIT
' Filter
' This program selects certain elements from an array into a new array in a generic way
' Extra points: Destroys the original values in the array
' Var
' $DYNAMIC
TYPE regSub
aNum AS INTEGER
END TYPE
CONST Even = 2
CONST Uneven = 1
CONST cFile = "DUMMY$$$.$$$"
CONST False = 0, True = NOT False
DIM t AS INTEGER
DIM t2 AS INTEGER
DIM f AS INTEGER
DIM i AS INTEGER
DIM iFlag AS INTEGER
DIM iGetWhat AS INTEGER
DIM iArray%(1 TO 1)
DIM rSub AS regSub
' Initialize vars
iFlag = False
t = INT(RND * 300) + 1
f = FREEFILE
iGetWhat = Even
REDIM iArray%(1 TO t)
' Main program cycle
OPEN cFile FOR OUTPUT AS #f
CLOSE
OPEN cFile FOR RANDOM AS #f LEN = LEN(rSub)
CLS
RANDOMIZE TIMER
PRINT "Select items in an array into a new array in a generic way."
PRINT "Base array:"
FOR i = 1 TO t
iArray%(i) = INT(RND * 2000) + 1
PRINT iArray%(i);
IF (iArray%(i) MOD 2) = 0 AND iGetWhat = Even THEN
iFlag = True
ELSEIF (iArray%(i) MOD 2) <> 0 AND iGetWhat = Uneven THEN
iFlag = True
END IF
IF iFlag THEN
rSub.aNum = iArray%(i)
PUT #f, , rSub
iFlag = False
END IF
NEXT i
' Redims the array
t = LOF(f) / LEN(rSub)
REDIM iArray%(1 TO t)
FOR i = 1 TO t
GET #f, i, rSub
iArray%(i) = rSub.aNum
NEXT i
CLOSE #f
KILL cFile
PRINT
' Shows the result
t2 = UBOUND(iArray%)
IF t2 > 0 THEN
PRINT "Selected items from the array (total:"; t2; "of"; t; "):"
FOR i = 1 TO t2
PRINT iArray%(i);
NEXT i
END IF
PRINT
PRINT "End of program."
END
</syntaxhighlight>
{{out}}
The output can change as the size of the base array and its values varies on each run.
<pre>
Select items in an array into a new array in a generic way.
Base array:
1426 770 1686 1472 385 1212 909 656 776 707 918 1646 1258 1406 887 42
Selected items from the array (total: 12 of 16 ):
1426 770 1686 1472 1212 656 776 918 1646 1258 1406 42
End of program.
</pre>
=={{header|R}}==
<
evennums <- a[ a%%2 == 0 ]
print(evennums)</
=={{header|Racket}}==
The classic way:
<syntaxhighlight lang="racket">
-> (filter even? '(0 1 2 3 4 5 6 7 8 9))
'(0 2 4 6 8)
</syntaxhighlight>
getting the list of non-evens too:
<syntaxhighlight lang="racket">
-> (partition even? '(0 1 2 3 4 5 6 7 8 9))
'(0 2 4 6 8)
'(1 3 5 7 9)
</syntaxhighlight>
Finally, using a for loop, similar to list comprehension:
<syntaxhighlight lang="racket">
-> (for/list ([x '(0 1 2 3 4 5 6 7 8 9)] #:when (even? x)) x)
'(0 2 4 6 8)
</syntaxhighlight>
=={{header|Raku}}==
Line 2,943 ⟶ 3,663:
{{works with|Rakudo|2018.03}}
<syntaxhighlight lang="raku"
my @even = grep * %% 2, @a;</
Alternatively:
<syntaxhighlight lang="raku"
my @even = @a.grep(* %% 2);</
Destructive:
<syntaxhighlight lang="raku"
@a .= grep(* %% 2);</
=={{header|Raven}}==
<
group nums each
dup 1 & if drop
list as evens</
=={{header|REBOL}}==
<
evens: [] repeat element a [if even? element [append evens element]]
print mold evens</
{{out}}
Line 2,976 ⟶ 3,696:
=={{header|Red}}==
<
orig: [] repeat i 10 [append orig i]
?? orig
Line 2,985 ⟶ 3,705:
remove-each ele orig [odd? ele] ;; destructive
?? orig
</syntaxhighlight>
{{out}}
<pre>orig: [1 2 3 4 5 6 7 8 9 10]
Line 2,996 ⟶ 3,716:
===using two arrays===
This example uses two arrays. The '''random''' BIF is used to generate the numbers.
<
If datatype(seed,'W') Then
End
End
End </syntaxhighlight>
{{out|output|text= when using the input of: <tt> , 12345 </tt>}}
The '''12345''' is the '''random''' BIF ''seed'' so that the random numbers can be repeated when re-running the REXX program.
<pre>
new.1 = 17520
Line 3,050 ⟶ 3,762:
new.23 = 44360
</pre>
===Using a control array===
<syntaxhighlight lang="rexx">
Call random,,seed /* use RANDOM seed for repeatability*/
End
If
even.j=1 /* turn on the even bit */
End
If even.k Then
End</syntaxhighlight>
<pre>
x.3 = 52754
x.5 = 94296
x.6 = 2068
x.13 = 71494
x.14 = 71628
x.15 = 47404
x.19 = 92502
x.20 = 24808</pre>
===using one array, destructive===
This version just uses one array to perform the filtering instead of creating a ''new'' array.
The result is a sparse array.
This method doesn't need as much memory
<
Call random,,seed /* use RANDOM seed for repeatability*/
End
Do j=1 To n /* process the elements of x.* */
If
Drop
End
Do k=1 To n /* display all the numbers */
If
Say right('x.'k,20) '=' right(x.k,9)
End</syntaxhighlight>
For the following input: <tt> 20 12345 </tt>
{{out|output|text= is the same as the 2<sup>nd</sup> REXX version.}} <br><br>
=={{header|Ring}}==
<syntaxhighlight lang="text">
aList = [1, 2, 3, 4, 5, 6]
bArray = list(3)
Line 3,114 ⟶ 3,829:
next
return bArray
</syntaxhighlight>
=={{header|RPL}}==
{{works with|Halcyon Calc|4.2.7}}
{| class="wikitable"
! RPL code
! Comment
|-
|
≪
DUP SIZE {} 2 ROT '''FOR''' j OVER j GET + 2 '''STEP'''
≫ ''''FILTR'''' STO
≪
LIST→ → len
≪ {} len 1 '''FOR''' j
'''IF''' j 2 MOD '''THEN''' SWAP DROP '''ELSE''' + '''END'''
-1 '''STEP'''
≫ ≫ ''''FILTD'''' STO
|
'''FILTR''' ''( { a1 a2.. an } -- { a1 a2.. an } { a2 a4... a2k } )''
selective copy
'''FILTD''' ''( { a1 a2.. an } -- { a2 a4... a2k } )''
Destructive version : put the array in the stack...
... and make a new one by picking one out of two items
|}
{{in}}
<pre>
{ 1 2 3 4 5 6 7 8 9 } FILTR
{ 1 2 3 4 5 6 7 8 9 } FILTD
</pre>
{{out}}
<pre>
3: { 1 2 3 4 5 6 7 8 9 }
2: { 2 4 6 8 }
1: { 2 4 6 8 }
</pre>
=={{header|Ruby}}==
Enumerable#select is the filter that returns a new Array.
<
ary = [1, 2, 3, 4, 5, 6]
even_ary = ary.select {|elem| elem.even?}
Line 3,127 ⟶ 3,883:
range = 1..6
even_ary = range.select {|elem| elem.even?}
p even_ary # => [2, 4, 6]</
=== Destructive ===
Array#select! is the destructive version which modifies the original Array.
<
ary.select! {|elem| elem.even?}
p ary # => [2, 4, 6]</
Shorthand:
<
ary.select!(&:even?)
p ary # => [2, 4, 6]</
=={{header|Run BASIC}}==
<
count = 100
for i = 1 to 100
Line 3,161 ⟶ 3,917:
for i = 1 to count
print a2(i)
next</
=={{header|Rust}}==
<
println!("new vec filtered: ");
let nums: Vec<i32> = (1..20).collect();
Line 3,175 ⟶ 3,931:
nums.retain(|x| x % 2 == 0);
println!("{:?}", nums);
}</
{{out}}
Line 3,188 ⟶ 3,944:
In this example, [1...10] is a list of the integers from 1 to 10. The comprehend expression walks over this list and selects only the even elements. The result of the comprehend expression is a new list with only the even elements. Then an iterate statement is used to walk over the list of even elements and print them out.
<
x!;</
Here's a version that walks an array destructively removing the non-even elements:
<
variable write_position := 0;
iterate (read_position; [0...9])
Line 3,207 ⟶ 3,963:
my_array := my_array[0...write_position - 1];
iterate(x; my_array)
x!;</
=={{header|Sather}}==
<
include ARRAY{T};
Line 3,232 ⟶ 3,988:
#OUT + "\n";
end;
end;</
=={{header|Scala}}==
<
=={{header|Scheme}}==
Filter function definition:
<
(define filter
(lambda (fn lst)
Line 3,250 ⟶ 4,006:
(iter rest (cons item result))
(iter rest result)))))))
</syntaxhighlight>
Usage in the interactive prompt:
<
(2 4 6 8 10)</
Or as a function:
<
(filter even? lst))
(select-even '(1 2 3 4 5 6 7 8 9 10))</
=={{header|Seed7}}==
<
var array integer: evens is 0 times 0;
var integer: number is 0;
Line 3,269 ⟶ 4,025:
evens &:= [] (number);
end if;
end for;</
=={{header|SequenceL}}==
Filters are primarily written in SequenceL using partial Indexed Functions.<br>
<
{{out}}
Line 3,282 ⟶ 4,038:
=={{header|Sidef}}==
<
# Creates a new array
var new = arr.grep {|i| i.is_even
say new
# Destructive (at variable level)
arr.grep! {|i| i.is_even
say arr
=={{header|Slate}}==
<
=={{header|Slope}}==
<syntaxhighlight lang="slope">
(define number-list (range 20))
(define even-number-list
(filter
(lambda (num) (equal? (% num 2) 0))
number-list))
(display number-list "\n" even-number-list "\n")
</syntaxhighlight>
'''Output:'''
<syntaxhighlight lang="text">
(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19)
(0 2 4 6 8 10 12 14 16 18)
</syntaxhighlight>
=={{header|Smalltalk}}==
Creates a new array:
<
or for short:
<
Destructive modification is not possible for literal constants (these are immutable);
in addition, Arrays are fix sized collections. It is also considered very bad style, to modify passed in arguments this way. Thus constructing a new Array object (as above) is the only correct solution.
Line 3,307 ⟶ 4,081:
{{works with|MS SQL}}
<
create table #nos (v int)
declare @n int set @n=1
Line 3,320 ⟶ 4,094:
-- Clean up so you can edit and repeat:
drop table #nos
drop table #evens</
'{{works with|MySQL}}
<
insert into nos values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
create temporary table evens (v int);
Line 3,329 ⟶ 4,103:
select * from evens order by v; /*2,4,6,8,10*/
drop table nos;
drop table evens;</
Or to be shorter, you could create the table evens directly from the query result :
<
=={{header|Stata}}==
<
a=2,9,4,7,5,3,6,1,8
Line 3,343 ⟶ 4,117:
// Select the indices of even elements of a
selectindex(mod(a,2):==0)
end</
=={{header|Swift}}==
<
let even_numbers = numbers.filter { $0 % 2 == 0 }
println(even_numbers)</
{{out}}
<pre>
Line 3,355 ⟶ 4,129:
=={{header|Tcl}}==
<
puts [lmap x $l {if {$x % 2} continue; set x}]</
{{out}}
<pre>56 62 76 82 94 28 90 52 44</pre>
<br>
Inplace way, quite the inefficient contraption compared to mapping:
<
upvar 1 $_list list
set list [lreplace $list[set list {}] {*}$args]
Line 3,377 ⟶ 4,151:
}
puts $l</
{{out}}
<pre>56 62 76 82 94 28 90 52 44</pre>
Explanation: https://wiki.tcl-lang.org/page/lreplace, section "Performance: Modifying a List In-Place"<br>
Proof by timing removal of the end element of lists of different lengths:
<
upvar 1 $_list list
set list [lreplace $list[set list {}] {*}$args]
Line 3,401 ⟶ 4,175:
puts " lreplace: [time {set l [lreplace $l end end]}]"
puts " lreplaceip: [time {lreplaceip l end end}]"
}</
{{out}}
<pre>1e5
Line 3,414 ⟶ 4,188:
=={{header|Toka}}==
<
10 cells is-array even
{
Line 3,426 ⟶ 4,200:
} is copy-even
10 0 [ i i table array.put ] countedLoop
table 10 copy-even</
=={{header|TUSCRIPT}}==
<
$$ MODE TUSCRIPT
arr="1'4'9'16'25'36'49'64'81'100",even=""
Line 3,437 ⟶ 4,211:
ENDLOOP
PRINT even
</syntaxhighlight>
{{out}}
<pre>
Line 3,446 ⟶ 4,220:
{{works with|Bash}}
<
unset e[@]
for ((i=0;i<${#a[@]};i++)); do
[ $((a[$i]%2)) -eq 0 ] && e[$i]="${a[$i]}"
done</
Or, using '''grep''':
<
read -a e -d\n < <(printf '%s\n' "${a[@]}" | grep '[02468]$')</
Either way, to display the results:
<
echo "${e[@]}"</
{{out}}
Line 3,467 ⟶ 4,241:
=={{header|UnixPipes}}==
<
=={{header|Ursala}}==
Line 3,481 ⟶ 4,255:
predicate <code>p</code> is to write <code>p*~</code>, as shown below.
<
#import nat
Line 3,488 ⟶ 4,262:
#cast %nL
y = (not remainder\2)*~ x</
{{out}}
Line 3,500 ⟶ 4,274:
of other ways to do it.
Selecting according to a binary predicate can be done like this.
<
The value of <code>z</code> will be the divisors of 36 appearing in the list.
<pre>
Line 3,517 ⟶ 4,291:
modified by appending an <code>F</code>, it becomes a selection filter.
For example
<
using the <code>x</code> defined above will evaluate to
<pre>
Line 3,525 ⟶ 4,299:
=={{header|V}}==
<
[1 2 3 4 5 6 7 8 9] [even?] filter
=[2 4 6 8]</
=={{header|VBA}}==
<syntaxhighlight lang="vb">
Option Explicit
Line 3,578 ⟶ 4,352:
Private Function IsEven(Number As Long) As Boolean
IsEven = (CLng(Right(CStr(Number), 1)) And 1) = 0
End Function</
{{Out}}
Line 3,586 ⟶ 4,360:
=={{header|VBScript}}==
<syntaxhighlight lang="vb">
test_arr_1 = Array(1,2,3,4,5,6,7,8,9,10)
test_arr_2 = Array(1,2,3,4,5,6,7,8,9,10)
Line 3,633 ⟶ 4,407:
ReDim Preserve arr(UBound(arr)-count)
filter_destruct = Join(arr,",")
End Function</
{{Out}}
Line 3,648 ⟶ 4,422:
=={{header|Visual Basic .NET}}==
{{works with|Visual Basic .NET|9.0+}}
<
Sub Main()
Line 3,689 ⟶ 4,463:
End Module
</syntaxhighlight>
{{out}}
Line 3,718 ⟶ 4,492:
</pre>
=={{header|V (Vlang)}}==
<syntaxhighlight lang="v (vlang)">
fn reduce(mut a []int){
mut last := 0
for e in a {
if e % 2 == 0 {
a[last] = e
last++
}
}
a = a[..last].clone()
}
fn main() {
mut nums := [5, 4, 8, 2, 4, 6, 5, 6, 34, 12, 21]
even := nums.filter(it % 2 == 0)
println('orig: ${nums}')
println('even: ${even}')
reduce(mut nums)
println('dest: ${nums}')
}
</syntaxhighlight>
{{out}}
<pre>
orig: [5, 4, 8, 2, 4, 6, 5, 6, 34, 12, 21]
even: [4, 8, 2, 4, 6, 6, 34, 12]
dest: [4, 8, 2, 4, 6, 6, 34, 12]
</pre>
=={{header|WDTE}}==
<
let s => import 'stream';
Line 3,750 ⟶ 4,528:
-> s.collect
-- io.writeln io.stdout
;</
{{out}}
Line 3,758 ⟶ 4,536:
=={{header|Wrapl}}==
<
<tt>a</tt> will be the list <tt>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]</tt>
<
<tt>e</tt> will be the list <tt>[2, 4, 6, 8, 10]</tt>
=={{header|Wren}}==
<
System.print("The original array is : %(a)")
Line 3,783 ⟶ 4,561:
System.print("\nAfter a destructive filter :-")
System.print("The even numbers are : %(evens)")
System.print("The original array is now : %(a)")</
{{out}}
Line 3,802 ⟶ 4,580:
There is no 'sizeof' operator, unfortunately.
<
proc Filter(A, B, Option); \Select all even numbers from array A
Line 3,829 ⟶ 4,607:
[IntOut(0, Array(I)); ChOut(0, ^ )];
CrLf(0);
]</
{{out}}
Line 3,838 ⟶ 4,616:
=={{header|XQuery}}==
<
(: Sequence of numbers from 1 to 10 :)
let $array := (1 to 10)
Line 3,856 ⟶ 4,634:
<long>{$long}</long>
</result>
</syntaxhighlight>
{{out}}
<
<?xml version="1.0" encoding="UTF-8"?>
<result>
Line 3,865 ⟶ 4,643:
<long>2 4 6 8 10</long>
</result>
</syntaxhighlight>
=={{header|XSLT}}==
<
<xsl:value-of select="@value" />
</xsl:for-each></
=={{header|Z80 Assembly}}==
{{untested}}
<
byte 4,4 ;4 rows, 4 columns.
TestArray:
Line 3,910 ⟶ 4,688:
djnz loop_filterEvenValues
ret ;return to basic</
{{out}}
Line 3,919 ⟶ 4,697:
=={{header|zkl}}==
<
.filter(fcn(n){(0).isType(n) and n.isOdd})
//-->L(1,9,25,49,81)</
=={{header|ZX Spectrum Basic}}==
<
20 DIM a(items)
30 FOR i=1 TO items
Line 3,937 ⟶ 4,715:
120 NEXT i
130 DIM a(1): REM To free memory (well, almost all)
140 DEF FN m(a,b)=a-INT (a/b)*b</
|