2016-10-09 5 views
1

Im Versuch Hinzufügen zu lernen, wie Arrays in Arrays hinzufügen, ich habe den folgenden Code:ein Array in einem Array Rubin

puts "would you like to save a data set" 
response = gets.chomp 

if response == "y" 
    puts "create a new dataset?" 
    create_data_set = gets.chomp 
    while create_data_set == "y" 
    puts "what do you want to name the data set?" 
    dataset = gets.chomp 
    dataset = Array.new 
    puts 'would you like to add some grades to the array?' 
    store_grades_response = gets.chomp 
    while store_grades_response == "y" 
     puts 'enter grade ->' 
     grade = gets.chomp.to_i 
     dataset << grade 
     puts 'would you like to store another grade?' 
     store_grades_response = gets.chomp 
    end 
    all_data_sets = Array.new 
    all_data_sets.push(dataset) 
    puts "would you like to create a new data set?" 
    create_data_set = gets.chomp 
    end 
end 

puts all_data_sets 

Im Grunde einen Benutzer auffordert, einen Array-Namen einzugeben, die ein Array erstellen sollten, Fügen Sie dem Array Werte hinzu und fügen Sie, falls vom Benutzer erforderlich, weitere Arrays und Werte hinzu. Zuletzt sollte das Array zu einem Array hinzugefügt werden. Und dann versuche ich alle Arrays anzuzeigen.

Der Code funktioniert gut, ich bin durchschleifen alles aber wenn es puts all_data_sets Es zeigt nur das letzte Array, das erstellt wurde? Ich möchte alle speichern, die Arrays innerhalb des einen Array namens all_data_sets

+0

Etwas, das ich in Ihrem Code bemerkt habe. In Ihrer ersten "while" -Schleife erstellen Sie eine lokale Variable "Dataset", die eine "Zeichenkette" sein soll, die den Namen darstellt, den ein Benutzer für die ** Dataset ** haben möchte, aber dann ordnen Sie 'Dataset' einem' Array' zu was bedeutet, dass der Name, den der Benutzer gewählt hat, verloren ist –

Antwort

1

Das Problem ist, dass man ein neues Array all_data_sets am Ende jeder Schleife schaffen. Eine Lösung wird sein, es vor der Schleife zu haben.

puts "would you like to save a data set" 
response = gets.chomp 
all_data_sets = [] 
if response == "y" 
    puts "create a new dataset?" 
    create_data_set = gets.chomp 
    while create_data_set == "y" 
    puts "what do you want to name the data set?" 
    dataset = gets.chomp 
    dataset = Array.new 
    puts 'would you like to add some grades to the array?' 
    store_grades_response = gets.chomp 
    while store_grades_response == "y" 
     puts 'enter grade ->' 
     grade = gets.chomp.to_i 
     dataset << grade 
     puts 'would you like to store another grade?' 
     store_grades_response = gets.chomp 
    end 
    all_data_sets << dataset 
    puts "would you like to create a new data set?" 
    create_data_set = gets.chomp 
    end 
end 

puts all_data_sets 

Auf diese Weise halten Sie die datasets in die all_data_sets nach jeder Schleife drücken.

Ich hoffe, das ist erklärend genug.

-1

Sie verketten können, prepend oder Arrays anhängen wie diese

dataset.concat all_dataset 
dataset + all_dataset 

Concat documentation

prepend oder anhängen

dataset.push(*all_dataset) 
all_dataset.unshift(*dataset) 

Array stuffs

Sie können auch an der Rubin docs Verbindung überprüfen und slice ganze Reihe von Stoffen tun

0

Fix

Sein, weil Ihr Array erstellen new_data_sets jedes Mal, wenn die Schleife zu tun, erklären sie außerhalb while-Schleife umschließt

-Code

def main 
    mainDataSet = [] # All datasets 
    dataSetNames = [] # Incase you want to store data set names 

    response = getInput("Would you like to save a data set") 

    if(response == "y") 
     choice = getInput("Create a new dataset?")   
     while choice == "y" 
      dataset = getInput("What do you want to name the data set?") 
      dataSetNames << dataset 
      dataset = [] 
      choice_2 = getInput("would you like to add some grades to the array?") 
      while choice_2== "y" 
       grade = getInput("Enter grade") 
       dataset << grade 
       choice_2 = getInput("Store another grade?") 
      end 
      mainDataSet << dataset 

      choice = getInput("Create a new data set?") 
     end 
    end 

    puts mainDataSet 
    puts dataSetNames 
end 


def getInput(message) 
    puts "#{message} -> " 
    gets.chomp 
end 

Hoffnung, das hilft.