# Enumerable::Enumerator#with\_memo

**URL:** <https://www.ruby-forum.com/t/enumerable-enumerator-with-memo/139395>\
**Category:** Development\
**Created:** [June 3, 2008, 3:00pm UTC](https://www.ruby-forum.com/t/enumerable-enumerator-with-memo/139395 "2008-06-03T15:00:42Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [June 3, 2008, 3:00pm UTC](https://www.ruby-forum.com/t/enumerable-enumerator-with-memo/139395/1 "2008-06-03T15:00:42Z")

</div>

ã€€Enumerable::Enumerator#with\_memo ã¨ã„ã†ã®ã‚’è¿½åŠ ã—ã¦ã¿ã¾ã—ãŸã€‚

ã€€å®Ÿè£…ã‚’ ruby ã§æ›¸ãã¨

```
def with_memo(memo, &block)
  block or return enum_for( __method__ )
  each {|i| yield(i, memo) }
  return memo
end

```

ã¨ã„ã†æ„Ÿã˜ã§ã™ã€‚

ã€€Enumerable#map\_to\_hash ã¿ãŸã„ã®ãŒã»ã—ã‹ã£ãŸäººã‚‚å¤šã„ã§ã—ã‚‡ã†ã—ã€  
inject ã§é ‘å¼µã£ã¦ã„ãŸäººã‚‚ã„ã‚‹ã¨æ€ã„ã¾ã™ãŒã€ã“ã¡ã‚‰ã®æ–¹ãŒæ±Žç”¨æ€§ãŒ  
ã‚ã‚Šã¾ã™ã€‚ä»Šã¾ã§ã€

```
hash = {}
enum.each {|i| hash[i] = ... if ... }

sum = 0
enum.each {|i| sum += ... }

```

ãªã©ã¨ã‚„ã£ã¦ã„ãŸã®ãŒãã‚Œãžã‚Œä¸€è¡Œã§æ›¸ã‘ã‚‹ã®ã§ä¾¿åˆ©ã ã¨æ€ã„ã¾ã™ã€‚

ã€€test/ruby/test\_enumerator.rb ã®ãƒ†ã‚¹ãƒˆã§ã¯ã“ã†ã„ã†ä¾‹ã‚’ç”¨æ„ã—ã¦  
ã„ã¾ã™ã€‚

```
r = 1..10
assert_equal([55, 3628800], (1..10).each.with_memo([0,1]) {|i, memo|
    memo[0] += i
    memo[1] *= i
  })

a = [2,5,2,1,5,3,4,2,1,0]
a.delete_if.with_memo({}) {|i, seen|
  if seen.key?(i)
    true
  else
    seen[i] = true
    false
  end
}
assert_equal([2, 5, 1, 3, 4, 0], a)

```

ã€€ãƒ¡ã‚½ãƒƒãƒ‰åã§ã™ãŒã€ with() ã§ã¯å¤§èƒ†ã™ãŽã‚‹ã¨æ€ã„ã€ inject() ã®  
rdocã«ã‚ã‚‹ memo ã‹ã‚‰åå‰ã‚’å–ã‚Šã¾ã—ãŸã€‚

ã€€ã„ããªã‚Š trunk ã«å…¥ã‚Œã¦ã—ã¾ã„ã¾ã—ãŸãŒã€æ„è¦‹ãŒã‚ã‚Œã°ãã ã•ã„ã€‚

---

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [June 3, 2008, 3:55pm UTC](https://www.ruby-forum.com/t/enumerable-enumerator-with-memo/139395/2 "2008-06-03T15:55:17Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:34912] Enumerable::Enumerator#with\_memo”  
on Tue, 3 Jun 2008 21:59:15 +0900, “Akinori MUSHA”  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|e$B!!e(BEnumerable::Enumerator#with\_memo e$B$H$$$&$N$rDI2C$7$F$_$^$7$?!#e(B  
|  
|e$B!!\<BAu$re(B ruby e$B$G=q$/$He(B  
|  
| def with\_memo(memo, &block)  
| block or return enum\_for( **method** )  
| each {|i| yield(i, memo) }  
| return memo  
| end  
|  
|e$B$H$$$&46$8$G$9!#e(B  
|  
|e$B!!e(BEnumerable#map\_to\_hash e$B$_$?$$$N$,$[$7$+$C$??M$bB?$$$G$7$g$&$7!“e(B  
|inject e$B$G4hD%$C$F$$$??M$b$$$k$H;W$$$^$9$,!”$3$A$i$NJ}$,HFMQ@-$,e(B  
|e$B$"$j$^$9!#e(B

e$B$3$&$$$&%a%=%C%I$rDI2C$9$k$3$H$=$N$b$N$O;?@.$G$9!#$?$@!"$J$se(B  
e$B$H$J$/L\>A0$,$7$C$/$j$-$^$;$s!#e(Bruby-coree$B$GJ9$$$F$\_$k$Y$-$G$7$ge(B  
e$B$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [June 3, 2008, 8:38pm UTC](https://www.ruby-forum.com/t/enumerable-enumerator-with-memo/139395/3 "2008-06-03T20:38:19Z")

</div>

At Tue, 3 Jun 2008 22:53:39 +0900,  
matz wrote:

> | return memo  
> ã†ã‹ã€‚  
> ã€€ã‚ã‚ŠãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚ruby-coreã«æŠ•ã’ã¦ã¿ã¾ã—ãŸã€‚
