0

Ich habe einen Hash-Array mit Schlüssel, Werte in Ruby, die ich jeden Wert mit Schlüssel übergeben möchte. Ich möchte Inhalte mit meinem Hash extrahieren. Mein Code ist:Wie bekomme ich jeden Wert vom Hash eines Arrays?

def get_content 
     GetPageContent.new(@pdf.id, session[:selected_pages][@document.id.to_s]) 
    end 

in session[:selected_pages] bekam ich wie diese

{"15"=>["001"], "24"=>["001","005"]} 

In diesem ersten Wert ist pdf id und zweiter Wert Seitenzahl dieser pdf.

Ich möchte dies:

GetPageContent.new(@pdf.id, session[:selected_pages][@document.id.to_s]) 

Ich möchte alle Werte wie dies passieren:

GetPageContent.new(15, 001) 
GetPageContent.new(24, 001) 
GetPageContent.new(24, 005) 

, wie jeder Schlüsselwerte von Hash-Array abzubilden? genügen

+0

nur durchschleifen mit '.each' – Fallenhero

+0

Ich habe das schon ausprobiert. Ich möchte erste Werte von Hash-Schlüssel als erstes Argument in meiner Methode und zweite Werte von jedem Schlüssel als zweites Argument. 15 und 24 sind pdf id und 15 -> 001 wobei 001 Seiten Nr. Ich möchte 001 als zweites Argument für jedes PDF übergeben. – sam

+0

Während Sie mit Ruby/Rails beginnen, müssen Sie ein Loo in der Dokumentation von Array, Hash, String-Methoden in Ruby haben, verwenden wir sie in jedem Code –

Antwort

3

Eine einfache wird verschachtelte Schleife:

session[:selected_pages].each do |pdf_id, page_numbers| 
    page_numbers.each { |page_number| GetPageContent.new(pdf_id, page_number) } 
end 
+0

plus eins für die Lesbarkeit –

1

Sie so etwas tun könnte ein einfaches Array zu erhalten. h ist Ihr Hash

pages = h.flat_map { |key, arr| ([key] * arr.size).zip(arr) } 
=> [["15", "001"], ["24", "001"], ["24", "005"]] 
pages.map! { |pdf_id, page_number| GetPageContent.new(pdf_id, page_number) } 
2

Sie so etwas wie dieses

hsh = {"15"=>["001"], "24"=>["001","005"]} 

hsh.each(&->(page, pages){pages.each{|id| GetPageContent.new(id, page)}}) 
1
session[:selected_pages] 
.map{|k, v| [k].product(v)}.flatten(1) 
# => [["15", "001"], ["24", "001"], ["24", "005"]] 

Der Rest ist bis zu Ihnen verwenden können.

Verwandte Themen