ruby - Returning index with value while using each_with_index method -
constructing basic address book in ruby. have following line of code in program iterates on existing array(@address_book) based on standard numeric input (entrynumber) match array index. resulting value matches index returned. here's code in question:
puts @address_book.entries.each_with_index.select {|val, i| == (entrynumber - 1)} the results great except index returned @ bottom, this: (note 0 @ end of return) i'd ideally index number @ bottom not returned.
view entry number entry number: 1 picked 1 name: adam adams phone number: 111-111-1111 email: aa@aa.com 0 what missing in terms of returning value, without index?
the problem
the trouble each_with_index turning @address_book.entries array of arrays. here's example of mean:
["a", "b"].each_with_index.to_a # => [["a", 0], ["b", 1]] so when apply select each_with_index, selected elements each going array element , index:
["a", "b"].each_with_index.select { |e, i| == 1 } => [["b", 1]] a bad fix
you fix using #map select first element of each selected row:
["a", "b"].each_with_index.select { |e, i| == 1 }.map(&:first) => ["b"] using select.with_index
better still, use select.with_index:
["a", "b"].select.with_index { |e, i| == 1} => ["b"] or, in case of code:
@address_book.entries. each_with_index.select.with_index {|val, i| == (entrynumber - 1)} using array#[]
if @address_book.entries array, can index array, not using select @ all:
@address_book_entries[entrynumber - 1] if it's not array, can turn 1 #to_a:
@address_book.entries.to_a[entrynumber - 1] however, if @address_book.entries large, use lot of memory. careful when turning enumeration array.
Comments
Post a Comment