2017-01-25 2 views
1

Я пытаюсь создать программу персонального компьютера, которая позволит мне быстро добавлять рецепты в базу данных и легко просматривать по категориям. Моя основная настройка для информации - иметь зубчатый массив категорий, каждый из которых имеет массив рецептов в этой категории. Я искал решение, но не нашел ничего, что, казалось бы, отвечало моей конкретной потребности. Ниже в основном описаны мои данные.Как добавить массив в массив в массив jagged

//Full List 
string[][][][][] arrA = { 
    //List Category 
    string[][][][] arrB = { 
     //Single Entry 
     string[][][] arrC = { 
      //Entry Subsection 
      string[][] arrD = { 
       //Entry Value 
       string[] arrE = { 
        "foo", "bar" 
       }, 
       //Entry Value 
       string[] arrF = { 
        "bar", "foo" 
       } 
      } 
     } 
     //Add Array here 
    } 
    //List Category 
    string[][][][] arrB = { 
    //Single Entry 
    //Etc... 
    } 
} 

и эффективно, что массив добавить выше, где он говорит Add Array Here

//Array to add (Entry in Category) 
string[][][][] arrV = { 
    string[][][] arrW = { 
     string[][] arrX = { 
      string[] arrY = { 
       "rab", "oof" 
      }, 
      string[] arrZ = { 
       "oof", "rab" 
      } 
     } 
    } 
} 

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

+0

Могу ли я спросить, почему вы выбрали зубчатый массив в качестве основной структуры данных? Это очень сложно работать, и я уверен, что он может быть разбит на более легко поддерживаемые фрагменты кода. – James

+0

Непонятная координация того, что правильный массив помещен в правильное положение, именно поэтому использование этого множества уровней вложенных массивов почти никогда не является хорошей дизайнерской идеей. – Abion47

+0

Я использую javascript совсем немного в последнее время, поэтому по какой-то нечетной причине я не совсем понимаю, могу мысленно отобразить, как обработанные зубчатые массивы работают лучше, чем другие параметры данных C#, которые я пытался при попытке получить сериализацию XML для работы (который я, наконец, выяснил на зубчатых массивах после попытки и неудачи по нескольким типам данных). – AeonEternity

ответ

-1

Для вашей проблемы

кажется, что гнездовые List s может решить. Что-то на линии:

var entireList = new List<List<List<List<List<string>>>>>(); 
var allCategories = new List<List<List<List<string>>>>(); 
and so on... 

Тогда вы могли бы сделать

entireList.Add(allCategories); 
and so on... 

Я полагаю, что первый элемент каждого List имен в списке. например, для списка Categories первый элемент должен назвать фактическую категорию, к которой относятся следующие элементы.

Для решения

Как вы планируете хранить этот список в базе данных? Я рекомендую сначала создать таблицы и схему схемы базы данных. i.e Таблица для категорий и т. д. Затем используйте ORM, например EnityFramework, для подключения к базе данных, а затем для доступа к каждому объекту по мере необходимости. Выполнение этого должно пережить вас из-за боли представления данных в том виде, в котором вы сейчас работаете.

+0

В настоящее время у меня есть данные, которые сериализуются в XML-документ. Можно ли сериализовать вложенные списки одинаково? – AeonEternity

+0

Это решение поставляется со многими из тех же головных болей, которые связаны с наличием большого количества вложенных массивов. Выведите решение на различные классы, каждый с соответствующими структурами данных по мере необходимости, и это будет намного чище. – James

+0

@james, это то, что описывает раздел ответа моего ответа – bit

0

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

Я бы рекомендовал использовать сопоставление из категории в массив рецептов в этой категории.

class Recipe 
{ 
    public string name { get; set; } 
    public List<string> ingredients { get; set; } 
    // ... other things the class needs 
} 

class MyCookbook 
{ 
    public Dictionary<string, List<Recipe>> categories = new Dictionary(); 

    // Creating a single recipe and giving it ingredients 
    var penne = new Recipe(); 
    penne.name = "Penne"; 
    penne.ingredients = new List<string>(); 
    penne.ingredients.add("Tomato Sauce"); 
    // ... add other ingredients 

    // Creating a list of recipes we will associate with some category 
    var typesOfPasta = new List<Recipe>(); 
    typesOfPasta.add(penne); 

    // Putting that list of recipes into a category, this time "Pasta" 
    categories.add("Pasta", typesOfPasta); 
} 

Это базовая установка, что вы можете расширить на что позволит вам иметь строку (скажем, «макароны»), указывающий на массив объектов Recipe (скажем, «лазанья», «спагетти и фрикадельки», и т. д.), где каждый объект рецепта содержит список необходимых ингредиентов для этого рецепта.

+0

И как бы вы потянули эти записи для отображения в программе? Основная цель этой программы - автоматически сортировать и отображать рецепты на основе категории (объект GUI tabControl) и имени рецепта (список кликов по каждой стороне категории). – AeonEternity

+0

. Если вам нужно получить доступ к записям, вы можете использовать нотацию в скобках на Список (например, 'typesOfPasta [0]' будет объектом рецепта, который мы определили, называется penne). Я предлагаю прочитать, как использовать списки и словари на C#. Пожалуйста, примите и подтвердите свой ответ, если он вам помог. Список - https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx Словарь https://msdn.microsoft.com/en-us/library/xfhwa508(v = vs.110) .aspx – James

+0

Я пытаюсь реализовать этот тип реструктуризации для хорошего бита сейчас, и я думаю, что существует проблема несоответствия между версией C#, которую вы используете, и той, которую я использую. Два основных несоответствия, которые я нахожу: 'var penne = new Recipe();' не работает в моем, мой MVS настаивает на том, что это 'List penne = new List ();'. Также 'public Dictionary > categories = new Dictionary();' изменяется на 'public Dictionary > categories = new Словарь <строка, список >();' наряду с 'categories' не имея возможности ссылаться на '.add' – AeonEternity

0
int mat [][] = new int [5][]; 
int [] numbers = new int[5];  //{ v1, v2, v3, v5, v6}; Vn: variable 

var arr1 = numbers.ToArray(); 

mat[0] = arr1; // o.K 

mat[0] = numbers; // K.O 
+1

Подумайте о добавлении некоторого текстового объяснения в свой ответ за то, что вы сделали и почему. – Ivan86