# Time = .collect {|i| {i=\> Time.now.send(i).to\_i}}

**URL:** <https://www.ruby-forum.com/t/time-collect-i-i-time-now-send-i-to-i/77869>\
**Category:** Ruby\
**Created:** [December 1, 2006, 4:00am UTC](https://www.ruby-forum.com/t/time-collect-i-i-time-now-send-i-to-i/77869 "2006-12-01T04:00:33Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![d0t1q](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/9e8a1a/32.png) [@d0t1q](https://www.ruby-forum.com/u/d0t1q)\
**Post date:** [December 1, 2006, 4:00am UTC](https://www.ruby-forum.com/t/time-collect-i-i-time-now-send-i-to-i/77869/1 "2006-12-01T04:00:33Z")

</div>

What’s the best way to make the first item below yield a hash instead  
of an array in one line? I’m struggling ☹

#doesnt work  
time = [“min”, “sec”].collect {|i| {i=\> Time.now.send(i).to\_i}}  
puts time.type # Array

#works  
time = [“min”, “sec”].collect {|i| {i=\> Time.now.send(i).to\_i}}.first  
puts time.type # Hash  
puts time[‘min’]

Thanks in advance

---

<div class="post-metadata">

**Author:** ![d0t1q](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/9e8a1a/32.png) [@d0t1q](https://www.ruby-forum.com/u/d0t1q)\
**Post date:** [December 1, 2006, 4:28am UTC](https://www.ruby-forum.com/t/time-collect-i-i-time-now-send-i-to-i/77869/2 "2006-12-01T04:28:36Z")

</div>

Sorry --Subject was supposed to be “Need help creating hash from an  
array”

---

<div class="post-metadata">

**Author:** ![d0t1q](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/9e8a1a/32.png) [@d0t1q](https://www.ruby-forum.com/u/d0t1q)\
**Post date:** [December 1, 2006, 4:42am UTC](https://www.ruby-forum.com/t/time-collect-i-i-time-now-send-i-to-i/77869/3 "2006-12-01T04:42:38Z")

</div>

ok…nvrmind… I think I got it:  
time = Hash[\*[“min”, “sec”].collect { |i| [i, Time.now.send(i)]}.flatten]

🙂

---

<div class="post-metadata">

**Author:** ![d0t1q](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/9e8a1a/32.png) [@d0t1q](https://www.ruby-forum.com/u/d0t1q)\
**Post date:** [December 1, 2006, 3:30pm UTC](https://www.ruby-forum.com/t/time-collect-i-i-time-now-send-i-to-i/77869/4 "2006-12-01T15:30:07Z")

</div>

On Fri, 1 Dec 2006, x1 wrote:

> puts time[‘min’]  
> harp:~ \> cat a.rb  
> now = Time.now  
> h = %w( min sec ).inject({}){|h,k| h.update k =\> now.send(k).to\_i}

p h

harp:~ \> ruby a.rb  
{“sec”=\>44, “min”=\>26}

in particular you don’t want to call Time.now inside the loop: you’ll  
otherwise  
sometimes get

{“sec”=\>0, “min”=\>42}

when you should have gotten

{“sec”=\>59, “min”=\>41}

regards.

-a

---

<div class="post-metadata">

**Author:** ![d0t1q](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/9e8a1a/32.png) [@d0t1q](https://www.ruby-forum.com/u/d0t1q)\
**Post date:** [December 2, 2006, 7:36am UTC](https://www.ruby-forum.com/t/time-collect-i-i-time-now-send-i-to-i/77869/5 "2006-12-02T07:36:51Z")

</div>

ah ok. Good point. I’m learning 🙂

Thanks so much ara!
