ãã®èšäºã¯ ã¢ãã€ã«ãã¡ã¯ããªãŒ Advent Calendar 2020 16æ¥ç®ã®èšäºã§ãã ã¯ããã« åäœç°å¢ éåŒã æ¡ä»¶ãæºããæåã®èŠçŽ ããšã æ¡ä»¶ãæºããæåŸã®èŠçŽ ããšã æ¡ä»¶ãæºããèŠçŽ ããåŸãã®èŠçŽ ãã¡ãæœåºãã æ¡ä»¶ãæºããèŠçŽ ä»¥éã®èŠçŽ ãã¡ãæœåºãã æ¡ä»¶ãæºããèŠçŽ ããåã®èŠçŽ ãã¡ãæœåºãã æ¡ä»¶ãæºããèŠçŽ ä»¥åã®èŠçŽ ãã¡ãæœåºãã å
é ããããã€ãã®èŠçŽ ãæœåºãã æ«å°Ÿããããã€ãã®èŠçŽ ãæœåºãã 1ã€ãããªãèŠçŽ ã®ã¿ãæœåºãã æ¡ä»¶ãæºããèŠçŽ ãæ€çŽ¢ãã æ¡ä»¶ãæºããèŠçŽ æ°ãæ±ãã æ¡ä»¶ãæºãããªãèŠçŽ æ°ãæ±ãã æ¡ä»¶ãæºããèŠçŽ ã®ã€ã³ããã¯ã¹ãæ±ãã æ¡ä»¶ãæºããæåã®èŠçŽ ã®ã€ã³ããã¯ã¹ãæ±ãã æ¡ä»¶ãæºããæåŸã®èŠçŽ ã®ã€ã³ããã¯ã¹ãæ±ãã æ¡ä»¶ãæºãããã äžã€ã®èŠçŽ ã®ã€ã³ããã¯ã¹ãæ±ãã æåã«CODE BLOCKãæ£åžžçµäºããèŠçŽ ã®çµæãæ±ãã æåŸã«CODE BLOCKãæ£åžžçµäºããèŠçŽ ã®çµæãæ±ãã äžã€ã ãCODE BLOCKãæ£åžžçµäºããèŠçŽ ã®çµæãæ±ãã èŠçŽ ã®æå€§å€ãæ±ãã æååã®æå€§ãæ±ãã èŠçŽ ã®æå°å€ãæ±ãã æååã®æå°ãæ±ãã æå°å€ãšæå€§å€ãåæã«æ±ãã ãªã¹ããæååé ã§äžŠã³æ¿ãã ãªã¹ããæ°å€é ã§äžŠã³æ¿ãã æååãçµåãã èŠçŽ ã®åèšãæ±ãã èŠçŽ ã®ç©ãæ±ãã åèŠçŽ ã®ãã¡ã©ãããæ¡ä»¶ãæºãããªãtrue åèŠçŽ ã®ãã¡ã©ãããæ¡ä»¶ãæºãããªããªãtrue å
šèŠçŽ ãæ¡ä»¶ãæºãããªãtrue å
šèŠçŽ ãæ¡ä»¶ãæºãããªããªãtrue èŠçŽ ããã 1ã€ã ãæ¡ä»¶ãæºãããªãtrue ããããã®èŠçŽ ã«åŠçãè¡ããã èŠçŽ ãã©ã³ãã ã«äžŠã³æ¿ãã æé »å€ãæ±ãã éè€ã匟ã ç¹å®ã®èŠçŽ ã®åŸãã«èŠçŽ ã远å ãã 2ã€ã®ãªã¹ããåæã«æäœãã è€æ°ã®ãªã¹ãã1ã€ã®ãªã¹ãã«ãã 1ã€ã®ãªã¹ããè€æ°ã®ãªã¹ãã«ä»åãã åèŠçŽ ãè€æ°ã®ãªã¹ãã«ä»åãã æ¡ä»¶ããšã®èŠçŽ æ°ãæ±ãã ãªã¹ãããã€ãã¬ãŒã¿ãäœæãã ãªã¹ãããè€æ°ããŸãšããŠè¿ãã€ãã¬ãŒã¿ãäœæãã key-valueãªã¹ãæäœ key-valueãªã¹ãããŸãšããŠ1èŠçŽ ã«ãã key, valueã®ãŸãšãŸããå±éãã key-valueãªã¹ãã®keyã®ã¿ãæœåºãã key-valueãªã¹ãã®valueã®ã¿ãæœåºãã key-valueãªã¹ãããæ¡ä»¶ã«ããå
šèŠçŽ ãæœåºãã æ¡ä»¶ã«ãã£ããã¢æ°ãåºã æ¡ä»¶ã«ããæåã®èŠçŽ ãæœåºãã æ¡ä»¶ã«ããèŠçŽ ãèŠã€ãã£ããã調ã¹ã key-valueãªã¹ãã«mapãšåãããšãããã ãŸãšã ã¯ããã« ããã«ã¡ã¯ããšã³ãžãã¢ã® id:Dozi0116 ã§ãã èªåã¯4æã«å
¥ç€ŸããŠããçŸåšãŸã§ã§ãããããªPerlã®ã³ãŒãã«è§Šããããã®ã§ããããã®äžã§ List::AllUtils ãšããã¢ãžã¥ãŒã«ãå°è±¡ã«æ®ã£ãŠããŸãã List::AllUtilsãšã¯ãããªã¹ãæäœã®ãããããè©°ãŸã£ãã¢ãžã¥ãŒã«ããéããŠäœ¿ããããã«ããã¢ãžã¥ãŒã«ã§ã List::Util List::SomeUtils List::UtilsBy ã®3ã€ã®ã¢ãžã¥ãŒã«ãäžäœåããã¢ãžã¥ãŒã«ã§ãã å®éã®éçºã§ã䜿ã£ãŠããŸãããããããã®é¢æ°ãè©°ãŸã£ãŠãããããã©ããªããšãã§ããã®ãïŒãå
šãçè§£ããããŠããŸããããŸããæ¢ã«æžãããŠãããœãŒã¹ã³ãŒããããã«List::AllUtilsã®ãã®ãšçè§£ãã§ãããæ°ãã颿°ãèŠããããã³ã«ãããªããšãŸã§ã§ããã®ãïŒãšé©ããŠããŸããã ãã£ãããããªäŸ¿å©ã¢ãžã¥ãŒã«ã䜿ã£ãŠããã®ã«äœ¿ãããªããªãã®ã¯ãã£ãããªã⊠ããã§ãList::AllUtilsãã§ããããšãçè§£ãããããããããããšãã䜿ãã¹ãã³ãŒããèŠã€ãããããªãããã«ããããŠä»ã«åãããã«å°ã£ãŠãã人ã®ããŒãã«ãäžããããããã®éåŒããäœããŸããã åäœç°å¢ Perl 5.30.2 List::AllUtils 0.18 List::SomeUtils 0.56 List::Util 1.45 List::UtilsBy 0.11 éåŒã ä»åèŒããŠããäŸã¯ ãã®ãã¹ãã³ãŒã ã§æ€èšŒããŠããŸãã ä»åã®éåŒãã§ã¯ã reduce ãªã©ã®çºæ³æ¬¡ç¬¬ã§ãªãã§ãã§ããããªé¢æ°ã¯ãæ¢ã«ãã颿°ãšå·®å¥åãã§ããå Žåã«ã®ã¿èŒããŠããŸãããäºæ¿ãã ããã ãŸããList::AllUtilsã®äŸåããŒãžã§ã³é¢ä¿äžã䜿ããªã颿°ãããã€ããããŸãã æ¡ä»¶ãæºããæåã®èŠçŽ ããšã @list = ( 4 , 7 , 1 ); $result = first { $_ > 5 } @list ; # 7 $result = first_value { $_ > 5 } @list ; # 7 $result = firstval { $_ > 5 } @list ; # first_valueã®ãšã€ãªã¢ã¹ extract_first_by ã¯æ¡ä»¶ãæºãããèŠçŽ ããªãªãžãã«ã®ãªã¹ãããæ¶ã @list = ( 4 , 7 , 1 ); $result = extract_first_by { $_ > 5 } @list ; # 7 print ( @list ); # (4, 1); reduce ã§æžãããšãã§ãã @list = ( 4 , 7 , 1 ); $result = reduce { defined ( $a ) ? $a : $b > 5 ? $b : undef } undef , @list ; æ¡ä»¶ãæºããæåŸã®èŠçŽ ããšã @list = ( 4 , 7 , 1 ); $result = last_value { $_ < 5 } @list ; # 1 $result = lastval { $_ < 5 } @list ; # åã(last_valueã®ãšã€ãªã¢ã¹) æ¡ä»¶ãæºããèŠçŽ ããåŸãã®èŠçŽ ãã¡ãæœåºãã @list = ( 2 , 4 , 6 , 8 , 10 ); @result = after { $_ > 5 } @list ; # (8, 10) æ¡ä»¶ãæºããèŠçŽ ä»¥éã®èŠçŽ ãã¡ãæœåºãã @list = ( 2 , 4 , 6 , 8 , 10 ); @result = after_incl { $_ > 5 } @list ; # (6, 8, 10) æ¡ä»¶ãæºããèŠçŽ ããåã®èŠçŽ ãã¡ãæœåºãã @list = ( 2 , 4 , 6 , 8 , 10 ); @result = before { $_ > 5 } @list ; # (2, 4) æ¡ä»¶ãæºããèŠçŽ ä»¥åã®èŠçŽ ãã¡ãæœåºãã @list = ( 2 , 4 , 6 , 8 , 10 ); @result = before_incl { $_ > 5 } @list ; # (2, 4, 6) å
é ããããã€ãã®èŠçŽ ãæœåºãã @list = 1..10 ; @result = head 3 , @list ; # (1, 2, 3) @result = head - 2 , @list ; # (1, 2, 3, 4, 5, 6, 7, 8) æ«å°Ÿããããã€ãã®èŠçŽ ãæœåºãã @list = 1..10 ; @result = tail 3 , @list ; # (8, 9, 10) @result = tail - 2 , @list ; # (3, 4, 5, 6, 7, 8, 9, 10) 1ã€ãããªãèŠçŽ ã®ã¿ãæœåºãã @list = ( 1 , 1 , 1 , 2 , 3 , 3 , 4 , 5 ); @result = singleton @list ; # (2, 4, 5) æ¡ä»¶ãæºããèŠçŽ ãæ€çŽ¢ãã @list = 1. . .10 ; @result = grep { $_ == 4 } @list ; # (4) äºåæ¢æ»ãããããã CODE BLOCK㯠æ¯èŒããèŠçŽ ãå°ãããªã-1ãã倧ãããªã1ããã¡ããã©ãªã0ãè¿ãå¿
èŠãããŸã @list ã¯ãœãŒããããŠããå¿
èŠããã @sorted_list = 1. . .10 ; @result = bsearch { $_ <=> 4 } @sorted_list ; # (4) extract_by ã¯èŠã€ããèŠçŽ ã result ã«æãåºããŠããªãªãžãã«ããæ¶ãã @list = 1. . .10 ; @result = extract_by { $_ == 4 } @list ; # (4) print ( @list ); # (1, 2, 3, 5, 6, 7, 8, 9, 10) æ¡ä»¶ãæºããèŠçŽ æ°ãæ±ãã @list = 1. . .10 ; $result = true { $_ < 4 } @list ; # 3 æ¡ä»¶ãæºãããªãèŠçŽ æ°ãæ±ãã @list = 1. . .10 ; $result = false { $_ < 4 } @list ; # 6 æ¡ä»¶ãæºããèŠçŽ ã®ã€ã³ããã¯ã¹ãæ±ãã äºåæ¢æ»ãããããã CODE BLOCK㯠æ¯èŒããèŠçŽ ãå°ãããªã-1ãã倧ãããªã1ããã¡ããã©ãªã0ãè¿ãå¿
èŠãããŸã @list ã¯ãœãŒããããŠããå¿
èŠããã @sorted_list = 1. . .10 ; $result = bsearch_index { $_ <=> 4 } @sorted_list ; # 3 $result_b = bsearchidx { $_ <=> 4 } @sorted_list ; # åã(bsearch_indexã®ãšã€ãªã¢ã¹) è€æ°ã®ã€ã³ããã¯ã¹ããŸãšããŠæ±ãããªã indexes ã䜿ã @list = ( 1 , 1 , 1 , 2 , 4 , 1 ); @result = indexes { $_ == 1 } @list ; # (0, 1, 2, 5) æ¡ä»¶ãæºããæåã®èŠçŽ ã®ã€ã³ããã¯ã¹ãæ±ãã @list = ( 1 , 1 , 1 , 2 , 4 , 1 ); $result = first_index { $_ == 1 } @list ; # 0 $result = firstidx { $_ == 1 } @list ; # åã(first_indexã®ãšã€ãªã¢ã¹) æ¡ä»¶ãæºããæåŸã®èŠçŽ ã®ã€ã³ããã¯ã¹ãæ±ãã @list = ( 1 , 1 , 1 , 2 , 4 , 1 ); $result = last_index { $_ == 1 } @list ; # 5 $result = lastidx { $_ == 1 } @list ; # åã(last_indexã®ãšã€ãªã¢ã¹) æ¡ä»¶ãæºãããã äžã€ã®èŠçŽ ã®ã€ã³ããã¯ã¹ãæ±ãã èŠçŽ ãè€æ°ãã£ãå Žåã -1 ãè¿ã @list = ( 1 , 1 , 1 , 2 , 4 , 1 ); $result = only_index { $_ == 2 } @list ; # 3 $result = onlyidx { $_ == 2 } @list ; # åã(only_indexã®ãšã€ãªã¢ã¹) $result = only_index { $_ == 1 } @list ; # -1 æåã«CODE BLOCKãæ£åžžçµäºããèŠçŽ ã®çµæãæ±ãã @list = ( 4 , 7 , 1 ); $result = first_result { $_ ** 2 if $_ > 3 } @list ; # 16 $result = firstres { $_ ** 2 if $_ > 3 } @list ; # åã(first_indexã®ãšã€ãªã¢ã¹) æåŸã«CODE BLOCKãæ£åžžçµäºããèŠçŽ ã®çµæãæ±ãã @list = ( 4 , 7 , 1 ); $result = last_result { $_ ** 2 if $_ > 3 } @list ; # 49 $result = lastres { $_ ** 2 if $_ > 3 } @list ; # åã(last_indexã®ãšã€ãªã¢ã¹) äžã€ã ãCODE BLOCKãæ£åžžçµäºããèŠçŽ ã®çµæãæ±ãã @list = ( 4 , 7 , 1 ); $result = only_result { $_ ** 2 if $_ > 5 } @list ; # 49 $result = onlyres { $_ ** 2 if $_ > 5 } @list ; # åã(last_indexã®ãšã€ãªã¢ã¹) # æ£åžžçµäºããèŠçŽ ãè€æ°ããå Žåãundefãè¿ã $result = only_result { $_ ** 2 if $_ > 3 } @list ; # undef èŠçŽ ã®æå€§å€ãæ±ãã @list = ( 1 , 4 , 3 ); $result = max @list ; # 4 max_by ã§æžãã°ãCODE BLOCKã¯èªç±ã«èšè¿°ã§ããã®ã§åšçšãªããšãã§ãã @list = ({ value => 2 , id => 1 }, { value => 5 , id => 2 }, { value => 5 , id => 3 }); $result = max_by { $_->{ value } } @list ; # { value => 5, id => 2 } ãªã¹ãã³ã³ããã¹ããè¿ãå€ã«æåŸ
ããã°ãå
šéšã®èŠçŽ ãååŸã§ãã @list = ({ value => 2 , id => 1 }, { value => 5 , id => 2 }, { value => 5 , id => 3 }); @result = max_by { $_->{ value } } @list ; # ({ value => 5, id => 2 }, { value => 5, id => 3 }) æååã®æå€§ãæ±ãã ããã§ããæååã®æå€§ãšã¯ãæåã³ãŒãæ¯èŒã§ã®æå€§ãæã @list = qw/a b c/ ; $result = maxstr @list ; # c @list = ({ name => 'a' }, { name => 'b' }, { name => 'c' }); $result = reduce { $a->{ name } gt $b->{ name } ? $a : $b } @list ; # { name => 'c' } èŠçŽ ã®æå°å€ãæ±ãã @list = ( 2 , 3 , 1 ); $result = min @list ; # 1 min_by ã§æžãã°ãCODE BLOCKã¯èªç±ã«èšè¿°ã§ããã®ã§åšçšãªããšãã§ãã @list = ({ value => 2 , id => 1 }, { value => 1 , id => 2 }, { value => 1 , id => 3 }); $result = min_by { $_->{ value } } @list ; # { value => 1, id => 2 } ãªã¹ãã³ã³ããã¹ããè¿ãå€ã«æåŸ
ããã°ãå
šéšã®èŠçŽ ãååŸã§ãã @list = ({ value => 2 , id => 1 }, { value => 1 , id => 2 }, { value => 1 , id => 3 }); @result = min_by { $_->{ value } } @list ; # ({ value => 1, id => 2 }, { value => 1, id => 3 }) æååã®æå°ãæ±ãã ããã§ããæååã®æå°ãšã¯ãæåã³ãŒãæ¯èŒã§ã®æå°ãæã @list = qw/b c a/ ; $result = minstr @list ; # a @list = ({ name => 'b' }, { name => 'a' }, { name => 'c' }); $result = reduce { $a->{ name } lt $b->{ name } ? $a : $b } @list ; # { name => 'a' } æå°å€ãšæå€§å€ãåæã«æ±ãã @list = ( 2 , 3 , 1 ); ( $min , $max ) = minmax @list ; # (1, 3) minmax_by ã§æžãã°ãCODE BLOCKã¯èªç±ã«èšè¿°ã§ããã®ã§åšçšãªããšãã§ãã @list = ({ value => 2 , id => 1 }, { value => 1 , id => 2 }, { value => 1 , id => 3 }); ( $min , $max ) = minmax_by { $_->{ value } } @list ; # ({ value => 1, id => 2 }, { value => 2, id => 1 }) ãªã¹ããæååé ã§äžŠã³æ¿ãã @list = ( 'banana' , 'melon' , 'apple' ); @result = sort @list ; # ('apple', 'banana', 'melon') æ¯èŒãããã®ãçµã¿èŸŒã¿é¢æ°ã® sort ãšéã£ãŠçç¥ã§ããããã sort_by ã䜿ãã°æ¯èŒçç°¡æœã«æžãããšãã§ãã @list = ({ name => 'banana' }, { name => 'melon' }, { name => 'apple' }); @result = sort_by { $_->{ name } } @list ; # ({ name => 'apple' }, { name => 'banana' }, { name => 'melon' }) sort_by ãéé ã§äœ¿ãããæã¯ rev_sort_by ã䜿ãã @list = ({ name => 'banana' }, { name => 'melon' }, { name => 'apple' }); @result = rev_sort_by { $_->{ name } } @list ; # ({ name => 'melon' }, { name => 'banana' }, { name => 'apple' }) ãªã¹ããæ°å€é ã§äžŠã³æ¿ãã @list = ( 23 , 1 , 12 ); @result = sort { $a <=> $b } @list ; # (1, 12, 23) æ¯èŒãããã®ãçµã¿èŸŒã¿é¢æ°ã® sort ãšéã£ãŠçç¥ã§ããããã nsort_by ã䜿ãã°æ¯èŒçç°¡æœã«æžãããšãã§ãã @list = ({ value => 23 }, { value => 1 }, { value => 12 }); @result = nsort_by { $_->{ value } } @list ; # ({ value => 1 }, { value => 12 }, { value => 23 }) nsort_by ãéé ã§äœ¿ãããæã¯ rev_nsort_by ã䜿ãã @list = ({ value => 23 }, { value => 1 }, { value => 12 }); @result = rev_nsort_by { $_->{ value } } @list ; # ({ value => 23 }, { value => 12 }, { value => 1 }) æååãçµåãã @list = qw/a b c/ ; $result = join '' , @list ; # "abc" reduce ã§æžãã°ãCODE BLOCKã¯èªç±ã«èšè¿°ã§ããã®ã§åšçšãªããšãã§ãã @list = qw/a b c/ ; $result = reduce { uc ( $a ) . uc ( $b ) } @list ; # "ABC" èŠçŽ ã®åèšãæ±ãã @list = 1..10 ; $result = sum @list ; # 55 # èŠçŽ ããªãæã¯undefãè¿ã @list = (); $result = sum @list ; # undef sum0 ãçšãããšèŠçŽ 0ã®ãªã¹ãã®å Žåã¯0ãè¿ã @list = (); $result = sum0 @list ; # 0 @list = ({ value => 2 }, { value => 4 }, { value => 1 }); $result = reduce { $a + $b->{ value } } 0 , @list ; # 7 èŠçŽ ã®ç©ãæ±ãã @list = 1..10 ; $result = product @list ; # 3628800 # èŠçŽ ããªãæã¯1ãè¿ã @list = (); $result = product @list ; # 1 @list = ({ value => 2 }, { value => 4 }, { value => 1 }); $result = reduce { $a * $b->{ value } } 1 , @list ; # 8 åèŠçŽ ã®ãã¡ã©ãããæ¡ä»¶ãæºãããªãtrue @list = ({ flag => 1 }, { flag => 0 }, { flag => 1 }); $result = any { $_->{ flag } } @list ; # 1 # 空ãªã¹ãã®å Žåãfalseãè¿ã @list = (); $result = any { $_->{ flag } } @list ; # "" any_u ã¯ç©ºãªã¹ãã®å Žåã« undef ãè¿ã @list = (); $result = any { $_->{ flag } } @list ; # "" $result = any_u { $_->{ flag } } @list ; # undef åèŠçŽ ã®ãã¡ã©ãããæ¡ä»¶ãæºãããªããªãtrue @list = ({ flag => 1 }, { flag => 0 }, { flag => 1 }); $result = notall { $_->{ flag } } @list ; # 1 # 空ãªã¹ãã®å Žåãfalseãè¿ã @list = (); $result = notall { $_->{ flag } } @list ; # "" notall_u ã¯ç©ºãªã¹ãã®å Žåã« undef ãè¿ã @list = (); $result = notall { $_->{ flag } } @list ; # "" $result = notall_u { $_->{ flag } } @list ; # undef å
šèŠçŽ ãæ¡ä»¶ãæºãããªãtrue @list = ({ flag => 1 }, { flag => 1 }, { flag => 1 }); $result = all { $_->{ flag } } @list ; # 1 # 空ãªã¹ãã®å Žåãtrueãè¿ã @list = (); $result = all { $_->{ flag } } @list ; # 1 all_u ã¯ç©ºãªã¹ãã®å Žåã« undef ãè¿ã @list = (); $result = all { $_->{ flag } } @list ; # 1 $result = all_u { $_->{ flag } } @list ; # undef å
šèŠçŽ ãæ¡ä»¶ãæºãããªããªãtrue @list = ({ flag => 0 }, { flag => 0 }, { flag => 0 }); $result = none { $_->{ flag } } @list ; # 1 # 空ãªã¹ãã®å Žåãtrueãè¿ã @list = (); $result = none { $_->{ flag } } @list ; # 1 none_u ã¯ç©ºãªã¹ãã®å Žåã« undef ãè¿ã @list = (); $result = none { $_->{ flag } } @list ; # 1 $result = none_u { $_->{ flag } } @list ; # undef èŠçŽ ããã 1ã€ã ãæ¡ä»¶ãæºãããªãtrue @list = ({ flag => 0 }, { flag => 1 }, { flag => 0 }); $result = one { $_->{ flag } } @list ; # 1 # 空ãªã¹ãã®å Žåãfalseãè¿ã @list = (); $result = one { $_->{ flag } } @list ; # "" one_u ã¯ç©ºãªã¹ãã®å Žåã« undef ãè¿ã @list = (); $result = one { $_->{ flag } } @list ; # "" $result = one_u { $_->{ flag } } @list ; # undef ããããã®èŠçŽ ã«åŠçãè¡ããã @list = ( 4 , 7 , 1 ); @result = map { $_ *= 2 } @list ; # (8, 14, 2) print ( @list ); # (8, 14, 2); apply ã§æžãã°ãå
ã®ãªã¹ãã¯å€æŽãããªã @list = ( 4 , 7 , 1 ); @result = apply { $_ *= 2 } @list ; # (8, 14, 2) print ( @result ); # (4, 7, 1) bundle_by ã§æžãã°ãè€æ°ã®èŠçŽ ããŸãšããŠåŠçã§ãã @list = ( 1. . .8 ); @result = bundle_by { [ $_[ 0 ] , $_[ 1 ] , $_[ 2 ] ] } 3 , @list ; # ([1, 2, 3], [4, 5, 6], [7, 8, undef]) èŠçŽ ãã©ã³ãã ã«äžŠã³æ¿ãã @list = ( 'a' , 'b' , 'c' , 'd' ); @result = shuffle @list ; # äœãåºããã¯ç¥ã®ã¿ãç¥ã weighted_shuffle_by ã§æžãã°ãéã¿ãã€ããã©ã³ãã ã«ãªã @list = ( 'a' , 'b' , 'c' ); @result = weighted_shuffle_by { { a => 1 , b => 0 , c => 99 }->{ $_ } } @list ; # ã»ãŒã»ãŒ ('c', 'a', 'b') æé »å€ãæ±ãã @list = ( 'apple' , 'pineapple' , 'apple' , 'banana' , 'apple' , 'apple' , 'apple' ); @result = mode @list ; # ('apple') éè€ã匟ã åŸã«åºãŠããéè€èŠçŽ ãæ¶ããã @list = ( 'hoge' , 'hoge' , 22 , 35 , 10 , 22 ); @result = uniq @list ; # ('hoge', 22, 35, 10) @result = distinct @list ; # åã(uniqã®ãšã€ãªã¢ã¹) èŠçŽ ãæ°å€oræååã§äžå®ãªã以äžã®é¢æ°ã䜿ãã @list = ( 1 , 2 , 3 , 1 , 5 ); @result = uniqnum @list ; # (1, 2, 3, 5) @list = ( 'a' , 'A' , 'aa' , 'a' ); @result = uniqstr @list ; # ('a', 'A', 'aa') uniq_by ã§æžãã°ãCODE BLOCKã¯èªç±ã«èšè¿°ã§ããã®ã§åšçšãªããšãã§ãã @list = ({ value => 2 , id => 1 }, { value => 1 , id => 2 }, { value => 1 , id => 3 }); @result = uniq_by { $_->{ value } } @list ; # ({ value => 2, id => 1 }, { value => 1, id => 2 }) ç¹å®ã®èŠçŽ ã®åŸãã«èŠçŽ ã远å ãã @list = ( 1 , 2 , 3 , 5 ); my $result = insert_after { $_ == 3 } 4 , @list ; @list ; # (1,2,3,4,5) stringã®ç䟡æ¯èŒããããªãã insert_after_string ã䜿ãã @list = ( 'first' , 'second' , 'third' , 'fifth' ); my $result = insert_after_string 'third' , 'fourth' , @list ; @list ; # ('first', 'second', 'third', 'fourth', 'fifth') 2ã€ã®ãªã¹ããåæã«æäœãã @list_a = ( 'a' , 'b' , 'c' ); @list_b = ( 1 , 2 , 3 ); @result = pairwise { { str => $a , num => $b } } @list_a , @list_b ; # ( { str => 'a', num => 1 }, { str => 'b', num => 2 }, { str => 'c', num => 3 }, ) è€æ°ã®ãªã¹ãã1ã€ã®ãªã¹ãã«ãã @list_a = ( 'a' , 'b' , 'c' ); @list_b = ( 1 , 2 ); @result = mesh @list_a , @list_b ; # ('a', 1, 'b', 2, 'c', undef) @result = zip @list_a , @list_b ; # åã(meshã®ãšã€ãªã¢ã¹) zip_by ã§æžãã°ãCODE BLOCKã¯èªç±ã«èšè¿°ã§ããã®ã§åšçšãªããšãã§ãã @list_a = ( 'a' , 'b' , 'c' ); @list_b = ( 1 , 2 ); @result = zip_by { $_[ 0 ] , $_[ 1 ] } \ @list_a , \ @list_b ; # ('a', 1, 'b', 2, 'c', undef) 1ã€ã®ãªã¹ããè€æ°ã®ãªã¹ãã«ä»åãã # CODE BLOCK 㯠ä»åãå
ã®ã€ã³ããã¯ã¹ãæåŸ
ããŠãã @list = ( 1 , 2 , 1 , 1 , 2 ); @result = part { $_ } @list ; # ( undef, [1, 1, 1], [2, 2] ) partition_by ã䜿ããšãä»åããæã®å€ãkeyãšããããã·ã¥ã§è¿ããŠããã @list = ( 1 , 2 , 1 , 1 , 2 ); %result = partition_by { $_ } @list ; # { 1 => [ 1, 1, 1 ], 2 => [ 2, 2] } åèŠçŽ ãè€æ°ã®ãªã¹ãã«ä»åãã @list = ({ id => 1 , name => 'hoge' , }, { id => 2 , name => 'fuga' }, { id => 3 , name => 'piyo' }); ( $ids , $names ) = unzip_by { $_->{ id } , $_->{ name } } @list ; # ids: (1, 2, 3), names: ('hoge', 'fuga', 'piyo') æ¡ä»¶ããšã®èŠçŽ æ°ãæ±ãã @list = ( 1 , 2 , 1 , 1 , 2 ); %result = count_by { $_ } @list ; # { 1 => 3, 2 => 2 } ãªã¹ãããã€ãã¬ãŒã¿ãäœæãã @list = ( 1 , 2 , 3 ); $it = each_array( @list ); $it ->(); # 1 $it ->(); # 2 $it ->(); # 3 $it ->(); # undef ãªãã¡ã¬ã³ã¹ããäœæãããªã each_arrayref ã䜿ãã $list = [ 1 , 2 , 3 ]; $it = each_array( $list ); $it ->(); # 1 $it ->(); # 2 $it ->(); # 3 $it ->(); # undef ãªã¹ãããè€æ°ããŸãšããŠè¿ãã€ãã¬ãŒã¿ãäœæãã @list = ( 1. . .8 ); $it = natatime 3 , @list ; $it ->(); # (1, 2, 3) $it ->(); # (4, 5, 6) $it ->(); # (7, 8) $it ->(); # undef key-valueãªã¹ãæäœ ããã§ã® key-valueãªã¹ã ãšã¯ãªã¹ãã®èŠçŽ ã (key1, value1, key2, value2, ...) ãšãªã£ãŠãããã®ã @kvlist = ( 'jp' , 'ããã«ã¡ã¯' , 'en' , 'hello' ); %hash = @kvlist ; $hash{ jp } ; # ããã«ã¡ã¯ key-valueãªã¹ãããŸãšããŠ1èŠçŽ ã«ãã @list = ( 'k1' , 'v1' , 'k2' , 'v2' ); @result = pairs @list ; # ( ['k1', 'v1'], ['k2', 'v2'] ) key, valueã®ãŸãšãŸããå±éãã @list = ( [ 'k1' , 'v1' ], [ 'k2' , 'v2' ] ); @result = unpairs @list ; # ('k1', 'v1', 'k2', 'v2') key-valueãªã¹ãã®keyã®ã¿ãæœåºãã @list = ( 'k1' , 'v1' , 'k2' , 'v2' ); @result = pairkeys @list ; # ( 'k1', 'k2' ) key-valueãªã¹ãã®valueã®ã¿ãæœåºãã @list = ( 'k1' , 'v1' , 'k2' , 'v2' ); @result = pairvalues @list ; # ( 'v1', 'v2' ) key-valueãªã¹ãããæ¡ä»¶ã«ããå
šèŠçŽ ãæœåºãã @list = ( 'k1' , 'v1' , 'k2' , 'v2' , 'k3' , 'v1' ); @result = pairgrep { $b eq 'v1' } @list ; # ('k1', 'v1', 'k3', 'v1') æ¡ä»¶ã«ãã£ããã¢æ°ãåºã 2ã€1ã»ããã§èŠããããæå€§å€ã¯èŠçŽ ã®ååã«ãªãããšã«æ³šæ @list = ( 'k1' , 'v1' , 'k2' , 'v2' , 'k3' , 'v1' ); $result = pairgrep { $a eq 'k1' && $b eq 'v1' } @list ; # 1 æ¡ä»¶ã«ããæåã®èŠçŽ ãæœåºãã @list = ( 'k1' , 'v1' , 'k2' , 'v2' , 'k3' , 'v1' ); ( $key , $value ) = pairfirst { $b eq 'v1' } @list ; # $key = 'k1', $value = 'v1' æ¡ä»¶ã«ããèŠçŽ ãèŠã€ãã£ããã調ã¹ã @list = ( 'k1' , 'v1' , 'k2' , 'v2' , 'k3' , 'v1' ); $result = pairfirst { $b eq 'v1' } @list ; # 1 key-valueãªã¹ãã«mapãšåãããšãããã @list = ( 'k1' , 'v1' , 'k2' , 'v2' ); @result = pairmap { " $a - $b " } @list ; # ( 'k1-v1', 'k2-v2' ) ãŸãšã Perlã®ã¢ãžã¥ãŒã«ã§ããList::AllUtilsã®éåŒããäœããŸããã ãã¡ãããããæ£è§£ãšããããã§ã¯ãªãããããããªæžãæ¹ãããã®ã§ããã®èšäºãèªãã æ¹ãæžãæ¹ã掻çšäŸãããã°æããŠãã ããã èªåã¿ããã«å
šå®¹ãçè§£ã§ããŠããªã人ã®å©ãã«ãªã£ããå¬ããã§ãã æåŸã«ãªããŸããããã®èšäºã«æžãã«ããã£ãŠååããŠããã瀟å¡ã®ã¿ãªãããããããšãããããŸããïŒ ææ¥ã®èšäºã¯ id:summer_gift ããã§ãïŒ