Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### DataTable.pm6 file content ###
- use v6;
- use Data::Dump;
- unit class DataTable:ver<0.0.1>:auth<github:tushardave26>;
- #custom types
- subset Int-or-Str where Int|Str;
- subset Array-or-Str where Array|Str;
- subset Array-or-Int where Array|Int;
- #attributes
- has Array @.data is rw = [];
- has Int-or-Str @.header is rw = [];
- has Int $.type is readonly = 0;
- # This method performs several sanity checks.
- method !sanity-check () {
- # 1. check whether all elements of all arrays of array of arrays (i.e. data) is equal or not
- unless [==] @!data {
- fail "The number of observations in each rows are not equal.!!";
- }
- # 2. check whether the header is provided in object creation or not
- unless @!header {
- @!header = @!data[0].keys.map('V'~*)
- }
- # 3. check whether the number of observation meaning number elements in a row is equal to
- # number of columns or not
- unless @!data.[0].elems == @!header.elems {
- fail "The number of observations and number of columns are not equal.!!";
- }
- # call sanity-check method within it definition
- #self!sanity-check();
- #return True;
- }
- multi method get-row (Int :$index! --> Array) {
- # check the provided data consistency and other possible issues
- self!sanity-check;
- return @!data[$index].Array;
- }
- multi method get-row (Array :@index! --> Array) {
- # check the provided data consistency and other possible issues
- self!sanity-check;
- return @!data[@index];
- }
- ### test.p6 content ###
- use v6;
- use lib '../lib';
- use Data::Dump;
- use DataTable;
- my $dt = DataTable.new(data => [["Tushar", "Dave", 29], ["John", "Adams", 30]],
- header => ["Fname", "Lname", "Age"],
- );
- my @row = $dt.get-row(index => [0..1]);
- #my @row = $dt.get-row(index => 0);
- @row.say;
- exit;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement