PerlÀڷᱸÁ¶ : HashÀÇ Hash
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

¼Ò°³

´ÙÀ½°ú °°Àº Çü½ÄÀÇ ¼³Á¤ÆÄÀÏ ³»¿ëÀ» ÀÐÀ» ¼ö ÀÖ´Â ÇÁ·Î±×·¥À» ¸¸µé±â¸¦ ¿øÇß´Ù. ²Ï ÀϹÝÀûÀÎ Çü½ÄÀ̰í, ¾Æ¸¶µµ °ü·Ã perl ¸ðµâÀ» ãÀ» ¼ö ÀÖÀ»°Å¶ó »ý°¢µÇ¾úÁö¸¸, PerlÀ» ÀÌ¿ëÇÑ ÀڷᱸÁ¶´Ù·ç´Â ¹ýµµ ÀÍÈú°âÇØ¼­ Á÷Á¢ ¸¸µé¾î º¸±â·Î Çß´Ù.

[section] 
name1=value 
name2=value1,value2 
 
¾Æ¸¶ C++À» ÀÌ¿ëÇß´Ù¸é, ºÐ¸íÈ÷ STLÀ» ÀÌ¿ëÇØ¼­ vectorÀÇ mapȤÀº mapÀÇ map Çü½ÄÀ¸·Î ±¸ÇöÇßÀ» °ÍÀÌ´Ù. ÀϹÝÀûÀÎ ÀڷᱸÁ¶·Î ÇÏÀÚ¸é ¹è¿­ÀÇ hash, hash ÀÇ hashÀÏ °ÍÀÌ´Ù. ¿¹Àü¿¡ C++·Î °£´ÜÈ÷ ±¸ÇöÇØº»°Ô Àִµ¥, ¾Æ¸¶ ÀÌ ÄÚµåÀÇ Perl ¹öÁ¯ÀÌ µÇÁö ¾ÊÀ»±î ½Í´Ù.

hash ÃʱâÈ­

°¡Àå °£´ÜÇѹæ¹ýÀº ºñ¾îÀÖ´Â list¸¦ ÇÒ´çÇÏ´Â °ÍÀÌ´Ù.
my %hash = (); 
 

Ű¿Í °ª Ãß°¡ Çϱâ

$hash{'key'} = 'value'; 
$hash{$key} = $value; 
 
hashÀÇ ·¹ÆÛ·±½ºÀÏ °æ¿ì¿¡´Â CÀÇ Æ÷ÀÎÅÍ¿¡¼­Ã³·³ '->'¸¦ »ç¿ëÇÑ´Ù.
$href->{'key'} = 'value'; 
$href->{$key} = $value; 
 

Çѹø¿¡ ¿©·¯°³ÀÇ Å°,°ª Ãß°¡Çϱâ

%hash = ('key1', 'value1', 'key2', 'value2', 'key3', 'value3'); 
 
key, value ¼øÀ¸·Î ³ª¿­ÀÌ µÈ´Ù. ¹è¿­°ú ÀüÇôÂ÷À̰¡ ¾øÀ½À» ¾Ë ¼ö ÀÖ´Ù. n¹øÂ° ¿ø¼Ò´Â key n+1¹øÂ° ¿ø¼Ò´Â value·Î ÇØ¼®ÀÌ µÉ »ÓÀÌ´Ù.

ÀÌ·¯ÇÑ hashÀÇ ¼ºÁúÀ» ÀÌ¿ëÇØ¼­, perl¿¡¼­ ±¸Á¶Ã¼¸¦ ±¸ÇöÇÒ ¼ö ÀÖ´Ù. Âü°í·Î perlÀº C¿¡¼­ÀÇ ±¸Á¶Ã¼¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾î¼­ »ç¿ëÀÚ Á¤º¸¸¦ À§ÇÑ userInfo ±¸Á¶Ã¼°¡ ÇÊ¿äÇÏ´Ù¸é, ´ÙÀ½°ú °°À» °ÍÀÌ´Ù.
%hash = ( 
    'name', '', 
    'address', '', 
    'age', '', 
    'tel', '' 
); 
 
´ÙÀ½Àº °£´ÜÇÑ Å×½ºÆ® ÇÁ·Î±×·¥ÀÌ´Ù.
#!/usr/bin/perl 
 
%userInfo = ( 
  'name', '', 
  'address', '', 
  'age', '', 
  'tel', '' 
); 
 
$userInfo{'name'} = 'yundream'; 
$userInfo{'address'} = 'seoul seo-cho dong'; 
$userInfo{'age'} = 19; 
$userInfo{'tel'} = '11-111-1111'; 
 
for $name(keys %userInfo) 
{ 
  print $name,"=>", $userInfo{$name},"\n"; 
} 
 
# ÇØ½¬°¡ ¹è¿­À̶ó´Â °ÍÀ» È®ÀÎÇϱâ À§Çؼ­.  
foreach(%userInfo) 
{ 
  print $_,"\n"; 
} 
 

hashÀÇ hash

óÀ½ Áö¿øÇÒ·Á°í Çß´ø, ¼³Á¤ÆÄÀÏÀ» ´Ù½Ã »ìÆìº¸µµ·Ï ÇÏÀÚ.
[section1] 
name1=value1 
name2=value2 
[section2] 
name1=value1 
name2=value2 
 
name1=value´Â name1ÀÌ Å°°¡ µÇ°í value°¡ °ªÀÌ µÇ´Â hashÀڷᱸÁ¶¸¦ °¡Áø´Ù. ±×¸®°í À̰ÍÀº ´Ù½Ã sectionÀ» key·Î ÇÏ´Â hashÀڷᱸÁ¶¿¡ µé¾î°¡°Ô µÈ´Ù. °á±¹ hashÀÇ hash°¡ µÈ´Ù.
section1 : name1=value1 name2=value2 
section2 : name1=value1 name2=value2 
 

´ÙÀ½Àº hashÀÇ hash ÀڷᱸÁ¶¸¦ Áö¿øÇÏ´Â ¼³Á¤ÆÄÀÏ Àбâ ÇÔ¼ö´Ù. perlÀÌ´Ï±î ¼­ºê·çƾÀ̶ó°í ÇÏ´Â°Ô ÁÁÀ»°Í °°´Ù.
001  sub getCfg
002  {
003    my ($cfgfile) = @_;
004    open(FD, "<$cfgfile");
005    $rSection = "";
006    %cfgmap=();
007    while($line = <FD>)
008    {
009      # ÀоîµéÀÎ ¶óÀÎÀÌ section ÀÎÁö¸¦ È®ÀÎÇÑ´Ù.
010      if($line =~ /\[[a-zA-Z0-9]+\]/) 
011      {
012        $line =~ s/\n|\[|\]//g;
013        push(@cfgSection, $cfgValue);
014        $Section = $line;
015        $rSection = $Section;
016        next;
017      }
018      # ¼³Á¤°ªÀ̶ó¸é '='¸¦ ±âÁØÀ¸·Î key¿Í value¸¦ ±¸ºÐÇØ³½´ÙÀ½ 
019      # ÇöÀç section À̸§À» key·Î ÇÏ´Â hash¿¡ Áý¾î ³Ö´Â´Ù.
020      if($line =~ /[a-zA-Z0-9]+=/)
021      {
022        $line =~ s/\s//g;
023        ($key, $value) = split '=', $line;
024        $cfgmap{$Section}{$key} = $value;
025      }
026    }
027    close(FD);
028    return \%cfgmap;
029  }
030  

STLÀÇ mapÀ» »ç¿ëÇØº» °æÇèÀÌ ÀÖ´Ù¸é, perlÀÇ hash of hash ÀڷᱸÁ¶°¡ Çò°¥¸± ¼ö ÀÖÀ» °Í °°´Ù. ¿Ö³ÄÇϸé STLÀ̶ó¸é ´ÙÀ½°ú °°ÀÌ ±¸ÇöµÉ °ÍÀ̱⠶§¹®ÀÌ´Ù. perl°ú´Â ´Ù¸£´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ³ªµµ óÀ½¿£ ÀÌ°Í ¶§¹®¿¡ ²Ï³ª ¾î¸®µÕÀý Çß¾ú´ø ±â¾ïÀÌ ÀÖ´Ù.
map.sub{key1} = value1; 
map.sub{key2} = value2; 
map.main{key} = map.sub 
 

hashÀÇ hash access

À§ÀÇ getCfg ¼­ºê·çƾÀ» ÀÌ¿ëÇØ¼­ hash of hashÀÇ aceess¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸°Ú´Ù. ±âº»ÀûÀ¸·Î µÎ¹øÀÇ ·çÇÁ¸¦ µ¹·Á¾ß ¿øÇÏ´Â °ªÀ» ¾ò¾î¿Ã ¼ö ÀÖ´Ù.
my $cfg = getCfg("config.cfg"); 
for my $section (keys %$cfg) 
{ 
  print "Section $section\n"; 
  for my $name (keys %{$cfg->{$section}}) 
  { 
    print "$name = $cfg->{$section}->{$name}\n"; 
  } 
} 
 

getCfg°¡ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇ߱⠶§¹®¿¡,->¿¬»êÀÚ¸¦ ½á¼­ °ª¿¡ Á¢±ÙÇß´Ù´Â °Í¿Ü¿¡´Â º° ƯÀÌ»çÇ×ÀÌ ¾ø´Ù.

°ü·Ã±Û

  1. [http]aero´ÔÀÌ ÀÛ¼ºÇÑ Perl¿¡ Hash´Â ¾ø´Ù? ³»°¡ ÀÛ¼ºÇÑ ¹®¼­¿¡¼­´Â ÆíÀÇ»ó hash¿Í array°¡ °°Àº °ÍÀ̶ó°í Çߴµ¥, ÀÌ ¹®¼­¿¡ hash¿Í arrayÀÇ Â÷ÀÌÁ¡¿¡ ´ëÇØ¼­ ÀÚ¼¼È÷ ¼³¸íÇϰí ÀÖ´Ù. ¾Ïư perlÀº º¹ÀâÇØ..
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.