Saturday, May 26, 2012

หา index จาก array 3 มิติ

พอดีเมื่อคืน โดนถามเรื่อง จะหาค่า index
ของ ค่าที่ต้องการ จากใน array 3 มิติ ยังไง (perl)
ก็เลย เขียน (มั่วๆ) มา ..
(ไม่ได้เขียนเป็น ฟังชั่น นะ)

ดังนั้น เอาไป พลิกแพลงเอาโลด



แบบ array ปกติๆ
#!/usr/bin/perl
use Data::Dumper;
my $search = 'four';
my @array = (
  [1, 2, 3, 'four'],
  ['one', 'two', 'three', 4]
);
foreach my $index_a (0..$#array){
  foreach my $index_b (@{$array[$index_a]}){
 if($array[$index_a][$index_b] eq $search){
   print "$search = \$hash[$index_a][$index_b]\n";
   exit;
 }
  }
}

แบบ แปลง %hash มารับค่า (ทำ ทำไม ?)
#!/usr/bin/perl
use Data::Dumper;
my %hash;
my $search = 'four';
my @array = (
  [1, 2, 3, 'four'],
  ['one', 'two', 'three', 4]
);
foreach my $i (0..$#array){
  @hash{$i} = $array[$i];
}
foreach my $index_a(keys %hash){
  my $i = 0;
  foreach my $index_b(@{$hash{$index_a}}){
 if($index_b eq $search){
   print "index = \$hash[$index_a][$i] = $index_b\n";
   exit;
 }
 $i++;
  }
}


unknown@PiratePeer~/Desktop# ./test.pl
index = $hash[0][3] = four


เสริม หาก จะเช็ค ว่า ค่านี้ เป็น array หรือไม่
ให้ใช้ ref($) เอา

# Is there an isArray() in Perl? --> http://www.perlmonks.org/?node_id=118961
foreach $item (@array){
  if(ref($item) eq 'ARRAY'){
 #It's an array reference...
 #you can read it with $item->[1]
 #or dereference it uisng @newarray = @{$item}
  }else{
 #not an array in any way...
  }
}

No comments:

Why You Don't LIKE My FaceBook Fanpage ?
×
blogger