2016-10-09 3 views
1

Im пытаясь узнать, как добавить массивы в массивы, у меня есть следующий код:Добавление массива в массив рубин

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 в основном просят пользователя ввести имя массива, который должен создать массив, добавьте значения в массив и, если потребуется, добавьте к нему еще несколько массивов и значений. Наконец, массив должен быть добавлен в массив. И затем я пытаюсь отобразить все массивы.

Код работает нормально, я все время перебираю, но когда он puts all_data_sets Он показывает только последний массив, который был создан? я хотел бы хранить все массивы в одном массиве с именем all_data_sets

+0

Что-то, что я заметил в вашем коде. В первом цикле 'while' вы создаете локальную переменную' dataset', которая должна быть «строкой», представляющей имя, которое пользователь хочет для ** набора данных **, но затем вы переназначаете 'dataset' в' array' который по существу означает, что имя, которое пользователь выбрал, потеряно –

ответ

1

Проблема заключается в том, что вы создаете новый массив all_data_sets в конце каждого цикла. Одно из решений - это иметь его перед циклом.

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 

Таким образом, вы сохраняете толкая datasets в all_data_sets после каждого цикла.

Я надеюсь, что это достаточно объяснительно.

-1

вы можете Concat, начальные или конечные массивы, как эта

dataset.concat all_dataset 
dataset + all_dataset 

Concat documentation

препендом или Append

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

Array stuffs

Также вы можете сделать срез и целую кучу питания проверить по ссылке рубин DOCS

0

Fix

Его, потому что ваш создать new_data_sets массив каждый раз, когда вы делаете петлю, объявить его вне ограждающим в то время как петля

Кода

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 

Надеется, что это помогает.

Смежные вопросы