Quale struttura dati C # dovrei usare per quantificare queste informazioni?

2

Sto cercando di determinare quale struttura dati dovrei usare per le seguenti informazioni:

        ("Water", 100F, 0F, 0F, 0F, 0F, 0F, 0F, 0F, 0F, 0F, "");
        ("Tuna", 60F, 184F, 30F, .01F, .001F, .064F, .05F, 0F, .011F, .05F, "");
        ("Chicken Breast", 62F, 197F, 30F, .01F, .001F, .027F, .07F, 0F, .013F, .084F, "");
        ("Cheese", 37F, 406F, 24F, .01F, .000F, .027F, .64F, 0F, 0F, .1F, "");
        ("Beef Sausage", 54F, 320F, 12F, .01F, .001F, .013F, .911F, 0F, .003F, .058F, "");
        ("Boiled Eggs", 75F, 155F, 12.5F, .01F, .001F, .010F, .124F, 0F, 0F, .373F, "");
        ("Broccoli", 89F, 34F, 3F, 2.4F, 0F, .021F, .033F, .089F, 0F, 0F, "");

Essenzialmente, questi sono tipi di alimenti e alcuni valori nutrizionali costituenti e la stringa alla fine è per ulteriori commenti.

Voglio poter chiamare il nome del cibo altrove nel codice (Ad esempio NutritionalData ("Tuna") e restituire i dati nutrizionali precedentemente memorizzati nella struttura dati.

Quando rispondi, tieni presente che sono un programmatore alle prime armi. Ho esaminato Array ma ciò sembrava limitato a un tipo di dati, e questi devono essere una combinazione di stringhe e galleggianti. La prima voce sarà unica (non ci saranno due voci per "Tuna", ad esempio), quindi mi chiedevo se il tipo di dati del dizionario potesse essere il migliore, ma non ne so molto.

O sarebbe meglio come una nuova classe come la seguente:

class FoodItem
    {
        string Name;
        float Hydration;
        float Calories;
        float Protein;
        float Fiber;
        float Iron;
        float Magnesium;
        float Sodium;
        float VitaminC;
        float Niacin;
        float Cholesterol;
        string Special;
    }

Ecco il codice modificato, non sono sicuro che funzioni perché non ho capito come chiamare un metodo al di fuori della classe. Yay per auto-educazione.

class MakeFoodDictionary
{
    public Dictionary<string, FoodItem> foodDictionary = new Dictionary<string, FoodItem>();

    public struct FoodItem
    {
        public string Name;
        public float Hydration;
        public float Calories;
        public float Protein;
        public float Fiber;
        public float Iron;
        public float Magnesium;
        public float Sodium;
        public float VitaminC;
        public float Niacin;
        public float Cholesterol;
        public string Special;
    }

    public FoodItem TempFoodItem;

    public void CreateAllFoods()
    {
        CreateNewFoodItem("Water", 100F, 0F, 0F, 0F, 0F, 0F, 0F, 0F, 0F, 0F, "");
        CreateNewFoodItem("Tuna", 60F, 184F, 30F, .01F, .001F, .064F, .05F, 0F, .011F, .05F, "");
        CreateNewFoodItem("Chicken Breast", 62F, 197F, 30F, .01F, .001F, .027F, .07F, 0F, .013F, .084F, "");
        CreateNewFoodItem("Cheese", 37F, 406F, 24F, .01F, .000F, .027F, .64F, 0F, 0F, .1F, "");
        CreateNewFoodItem("Beef Sausage", 54F, 320F, 12F, .01F, .001F, .013F, .911F, 0F, .003F, .058F, "");
        CreateNewFoodItem("Boiled Eggs", 75F, 155F, 12.5F, .01F, .001F, .010F, .124F, 0F, 0F, .373F, "");
        CreateNewFoodItem("Broccoli", 89F, 34F, 3F, 2.4F, 0F, .021F, .033F, .089F, 0F, 0F, "");
        CreateNewFoodItem("Dry Oats", 8F, 389F, 17F, 10.6F, .005F, .177F, .002F, 0F, .001F, 0F, "");
        CreateNewFoodItem("Ale", 91F, 37F, .2F, 0F, 0F, .007F, .013F, 0F, .001F, 0F, "Inebriation");
        CreateNewFoodItem("Salted Beans", 67F, 127F, 8.67F, 6.4F, .003F, .045F, .238F, .001F, .001F, 0F, "");
        CreateNewFoodItem("Bread", 32F, 278F, 8.4F, 6F, .003F, .081F, .346F, 0F, .004F, 0F, "");
        CreateNewFoodItem("Turnips", 92F, 28F, .9F, 1.8F, 0F, .011F, .067F, .021F, 0F, 0F, "");
        CreateNewFoodItem("Salted Pork", 11F, 748F, 5F, 0F, 0F, .007F, 2.684F, 0F, .002F, .086F, "");
        CreateNewFoodItem("Cabbage", 92F, 25F, 1F, 1.9F, 0F, .012F, .018F, .037F, 0F, 0F, "");
        CreateNewFoodItem("Dried Blueberries", 15F, 317F, 2.5F, 7.5F, .001F, .018F, .003F, .024F, .001F, 0F, "");
        //AddNewFoodToArray(string Name, float Hydration, float Calories, float Protein, float Fiber, float Iron, float Magnesium, float Sodium, float VitaminC, float Niacin, float Cholesterol); 
        TempFoodItem = TempFoodItem;
    }

    public void CreateNewFoodItem(string _Name, float _Hydration, float _Calories, float _Protein, float _Fiber, float _Iron, float _Magnesium, float _Sodium, float _VitaminC, float _Niacin, float _Cholesterol, string _Special)
    {
        TempFoodItem = new FoodItem
        {
            Name = _Name,
            Hydration = _Hydration,
            Calories = _Calories,
            Protein = _Protein,
            Fiber = _Fiber,
            Iron = _Iron,
            Magnesium = _Magnesium,
            Sodium = _Sodium,
            VitaminC = _VitaminC,
            Niacin = _Niacin,
            Cholesterol = _Cholesterol,
            Special = _Special
        };
        foodDictionary.Add(_Name, TempFoodItem);
    }
}
    
posta Fixer 01.10.2015 - 19:02
fonte

3 risposte

3

Sì, usa FoodItem .

Puoi memorizzarli in List<> , quindi usare linq (molto cool) per trovare quello che vuoi:

List<FoodItem> myFoodItems = new List<FoodItem>();

/* populate myFoodItems the hard way */
myFoodItems.Add(new FoodItem{
    Name = 'tuna',
    Hydration = 60F,
    /* rest of items skipped - you get the idea */
});

FoodItem tuna = myFoodItems.Find(e => e.Name == "tuna");

Se hai una zillion di FoodItem s, puoi anche memorizzarli in un dizionario per nome:

Dictionary<string, FoodItem> foodDict = new Dictionary<string, FoodItem>();
/* initialize the hard way */
myfoodItem = new FoodItem{
    Name = "tuna",
    Hydration = 60F,
    /* and so on */
};
foodDict.Add("tuna", myfoodItem);

FoodItem tuna = foodDict["tuna"];

La duplicazione di FoodItem.Name e la chiave del dizionario è OK, lascialo lì (risparmierà il tempo di debug).

Questo sta inizializzando nel modo più difficile - dovresti davvero memorizzare questi dati in un file da qualche parte, quindi leggerli all'avvio del programma - questo renderà più facile aggiungere nuovi elementi e correggere gli errori. Il codice è molto più lungo di questo.

    
risposta data 01.10.2015 - 19:09
fonte
0

Vai oltre

public class NutritionalData
{
    public string Type {get;set;}
    public float Grams {get;set;}
}

public class FoodItem
{
   public string Name {get;set;}
   public List<NutritionalData> NutritionalContent {get;set;}
   public string Description {get;set;}
}
    
risposta data 01.10.2015 - 19:24
fonte
-1

Potrebbe essere più efficiente memorizzare tutti i dati in un database esterno e importare i dati e chiamare ogni elemento necessario utilizzando un ciclo.

    
risposta data 03.10.2015 - 08:16
fonte

Leggi altre domande sui tag