Filter: Difference between revisions
(→[[C]]: Added syntax highlighting) |
(→[[C]]: Removed syntax highlighting) |
||
Line 16: | Line 16: | ||
[[Category:C]] |
[[Category:C]] |
||
<highlightSyntax language=C> |
|||
int arr[5] = {1,2,3,4,5}; |
int arr[5] = {1,2,3,4,5}; |
||
int *result; |
int *result; |
||
Line 35: | Line 34: | ||
} |
} |
||
} |
} |
||
</highlightSyntax> |
|||
Test our resultant array: |
Test our resultant array: |
||
<highlightSyntax language=C> |
|||
for(i=0; i<memoryReqd; i++) |
for(i=0; i<memoryReqd; i++) |
||
{ |
{ |
||
printf("%d\n",result[i]); |
printf("%d\n",result[i]); |
||
} |
} |
||
</highlightSyntax> |
|||
==[[C plus plus|C++]]== |
==[[C plus plus|C++]]== |
Revision as of 14:49, 22 February 2007
You are encouraged to solve this task according to the task description, using any language you may know.
Select certain elements from an Array into a new Array in a generic way. To demonstrate, select all even numbers from an Array.
AppleScript
set array to {1, 2, 3, 4, 5} set evens to {} repeat with i in array -- very important -- list index starts at 1 not 0 if (i mod 2 = 0) then set evens to evens & i end repeat
C
int arr[5] = {1,2,3,4,5}; int *result; int memoryReqd = 0,length = sizeof(arr)/sizeof(arr[0]), i,j; for (i=0; i<length; i++) { if(0 == arr[i]%2) { memoryReqd++; } } result = (int*)malloc(memoryReqd*sizeof(int)); for(i=0,j=0; i<length; i++) { if(0 == arr[i]%2) { result[j++]=arr[i]; } }
Test our resultant array:
for(i=0; i<memoryReqd; i++) { printf("%d\n",result[i]); }
C++
Compiler: Visual C++ 2005
Libraries: STL, Boost.Lambda
using namespace std; using namespace boost::lambda; vector<int> ary(10); int i = 0; for_each(ary.begin(), ary.end(), _1 = ++var(i)); // init array vector<int> evens; remove_copy_if(ary.begin(), ary.end(), back_inserter(evens), _1 % 2); // filter copy
C#
// .NET 1.x solution ArrayList array = new ArrayList( new int[] { 1, 2, 3, 4, 5 } ); ArrayList evens = new ArrayList(); foreach( int i in array ) { if( (i%2) == 0 ) evens.Add( i ); } foreach( int i in evens ) System.Console.WriteLine( i.ToString() );
// .NET 2.0 solution List<int> array = new List<int>( new int[] { 1, 2, 3, 4, 5 } ); List<int> evens = array.FindAll( delegate( int i ) { return (i%2)==0; } ); foreach( int i in evens ) System.Console.WriteLine( i.ToString() );
Haskell
ary = [1..10] evens = [ x | x <- ary, even x ]
IDL
The where() function can select elements on any logical expression. For example
result = array[where(NOT array AND 1)]
Java
int[] array = new int[] {1, 2, 3, 4, 5 }; List<Integer> evensList = new ArrayList<Integer>(); for (int i: array) { if (i % 2 == 0) evensList.add(i); } int[] evens = evensList.toArray(new int[0]);
JavaScript
var arr = [1,2,3,4,5]; var evens = []; for (var i=0, ilen=arr.length; i<ilen; i++) if (arr[i] % 2 == 0) evens.push(arr[i]);
Interpreter: Firefox 2.0
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var evens = [i for (i in numbers) if (i % 2 == 0)]; function range(limit) { for(var i = 0; i < limit; i++) { yield i; } } var evens2 = [i for (i in range(100)) if (i % 2 == 0)];
Perl
my @list = (1, 2, 3, 4, 5, 6); my @even = grep { 0 == $_%2; } @list;
PHP
Using a standard loop
$arr = range(1,5); $evens = array(); foreach ($arr as $val){ if ($val % 2 == 0) $evens[] = $val); } print_r($evens);
Using a filter function
function is_even($var) { return(!($var & 1)); } $arr = range(1,5); $evens = array_filter($arr, "is_even"); print_r($evens);
Python
values = range(10) evens = [x for x in values if not(x & 1)] ievens = (x for x in values if not(x & 1)) # lazy
Ruby
ary = [1,2,3,4,5,6] #or ary = (1..6).to_a even_ary = ary.select{|el|el%2==0} # => [2, 4, 6]
Scala
val a = Array(1, 2, 3, 4, 5) val even = a.filter{x => x % 2 == 0}
Or
val even = for(val x <- a; x % 2 == 0) yield x
SQL
Task: Select certain elements from an Array into a new Array in a generic way. To demonstrate, select all even numbers from an Array.
MS SQL
--Create the original array (table #nos) with numbers from 1 to 10 create table #nos (v int) declare @n int set @n=1 while @n<=10 begin insert into #nos values (@n) set @n=@n+1 end --Select the subset that are even into the new array (table #evens) select v into #evens from #nos where v % 2 = 0 -- Show #evens select * from #evens -- Clean up so you can edit and repeat: drop table #nos drop table #evens
MySQL
create temporary table nos (v int); insert into nos values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); create temporary table evens (v int); insert into evens select v from nos where v%2=0; 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 :
create temporary table evens select * from nos where v%2=0;
Standard ML
val ary = [1,2,3,4,5,6]; List.filter (fn x => x mod 2 = 0) ary
Tcl
TCL doesn't really have a concept of a "number" per se - strictly speaking its only data type is the string (but a string can be interpreted as a number, of course). The generic way of getting certain elements from an array looks roughly like this:
foreach key [array names arr] {if { <condition> } then {puts $arr($key)}}