Critica la struttura della mia piattaforma di scommesse su corse di cavalli

0

Sto creando un programma (principalmente solo per divertimento) che mostra i prezzi in tempo reale per i mercati delle corse ippiche e i prezzi che diversi modelli prevedono che dovrebbero essere. Sono molto interessato al modo ottimale di strutturare questo tipo di dati.

Ho bisogno di un Dictionary<int, (something)> per memorizzare <raceId, data> dove la chiave (raceId) è un numero che ho generato (per eliminare le vecchie razze dal dizionario quando la corsa è finita). Le vales (dati) sono costituite dai prezzi effettivi per ciascuna selezione nella gara e dai prezzi di 3 modelli separati corrispondenti a ciascuna selezione.

Il dizionario conterrà 20-60 gare a seconda del tempo.

Ecco un esempio dei dati per ogni razza:

ActualPrice    ModelAPrice    ModelBPrice    ModelCPrice
3.25           3.26           3.29           3.20
5.60           5.63           5.55           5.57
etc.

Il numero di righe è in genere intorno a 40. Alcuni modelli non offrono prezzi per alcune delle righe, ma per ogni prezzo effettivo c'è almeno 1 prezzo del modello.

Inoltre, per ogni corsa dati memorizzo le stringhe per RaceCourse, StartTime, Location, ecc. Inoltre memorizzo marketIds sotto forma di ints, che corrispondono a più righe alla volta (queste sono usate per piazzare le puntate effettive) , ci sono circa 6 marketId per gara.

Stavo usando una classe per memorizzare tutti i dati in chiamati RaceData composti da campi per stringhe (ad esempio RaceCourse, Location), ints (cioè WinMarketId, PlaceMarketId) e doubles (cioè HorseA_ActualPrice, HorseA_ModelAPrice, ecc.). Quindi il mio dizionario è composto da <RaceId, RaceData> .

Ma mi stavo chiedendo se invece sarebbe stato meglio memorizzare i dati su 3 dizionari.

Dictionary<int, Dictionary<string, string>> 
<RaceId, <StringName, StringValue>> 
Example of usage: Use RaceId=102313 and StringName="RaceCourse" to get Value="Flemington"

Dictionary<int, Dictionary<string, int>>
<RaceId, <MarketName, MarketId>>
Example of usage: Use RaceId=131231 and MarketName="WinMarket" to get MarketId=1321313

Dictionary<int, Dictionary<string, double>[]>
An array of dictionaries (one for each column of the data).
<RaceId, <RowName, Price>>
Example of usage: Use RaceId=12313 and RowName="HorseAWinPrice" to get Price=3.25

Non sono sicuro che sia necessario un array di dizionari per l'ultimo, poiché potrei semplicemente cambiare le chiavi per avere la colonna in primo piano, ad esempio "ModelA_HorseBWinPrice" o "Actual_HorseBWinPrice". Quale è meglio?

La velocità è una preoccupazione importante quando ho ~ 60 razze e ~ 200 primati per ciascuna. Devo eseguire diversi calcoli di base utilizzando i valori di ciascuna riga per tutte le gare. Devo anche visualizzare il nome / ora della raca in una listbox e, per la voce selezionata nella casella di riepilogo, visualizzare tutti i prezzi sul modulo (in diverse caselle di elenco). Vale la pena notare che ogni listbox corrisponde a un marketId.

Qual è una soluzione migliore o puoi suggerirne una migliore che non ho proposto?

    
posta janderson 29.12.2013 - 03:36
fonte

2 risposte

0

Piuttosto che usare i dizionari mi piace l'approccio dell'utilizzo di raccolte di classi per i diversi tipi. Ciò renderebbe i dati più auto-definitivi e consentirà l'utilizzo di LINQ to Objects per aiutare a aggregare e ordinare i dati. Renderà anche più semplice il collegamento alle caselle di riepilogo.

    
risposta data 29.12.2013 - 05:53
fonte
1

But I was wondering if instead it would be better to store the data over 3 Dictionaries.

Risposta breve: no, non è meglio - è peggio e ti porterà direttamente in un inferno di manutenzione. Non sostituire i nomi di bene, i dati ben strutturati con dati anonimi che sono distribuiti su diversi contenitori anche se ovviamente appartiene insieme.

Speed is a major concern when I have ~60 races and ~200 primatives for each.

Non conosco i tuoi calcoli effettivi, ma immagino che non noterai una grande differenza di prestazioni tra queste due alternative. Quindi scegli quello più pulito (che è chiaramente il primo).

    
risposta data 29.12.2013 - 11:14
fonte

Leggi altre domande sui tag