Ho un dizionario di dizionari che devo attraversare per trovare due record con vari parametri di corrispondenza. Ho due foreach loop per fare ciò che è O (n ^ 2). Sto cercando l'ispirazione per trovare un modo migliore per farlo utilizzando i tasti per migliorare la ricerca.
Semplice esempio di seguito.
modifica: ogni record contiene molti valori che vorrei provare ad abbinare. Qui di seguito sto cercando una transazione BUY e SELL nei record. Vorrei anche abbinare lo stesso cliente e la stessa posizione, che sono le chiavi nel dizionario dei record. È possibile che il dizionario abbia solo valori di transazione "BUY". Il dizionario dei record contiene anche diversi tipi di valore, come double e int.
- < "uniqueRecordIdABC", < "Transaction", "BUY" & gt ;, < "Location", "Store1" & gt ;, < "Client", "Bob" > >
- < "uniqueRecordIdDEF", < "Transaction", "SELL" & gt ;, < "Location", "Store2" & gt ;, < "Client", "Bob" > >
Ciò che ho pensato di fare è rendere l'unicoRecordKey qualcosa che potrei analizzare, migliorando la ricerca. IE: 1: ACQUISTO: Store1: Bob, 2: VENDO: Store2: Bob, ma non sono sicuro se ci sia un vantaggio reale a riguardo.
Esempio:
Dictionary<string, Dictionary<string, object>> records
foreach (var item in records)
{
Dictionary<string, object> record = item.Value;
string transaction1 = Convert.ToString(record["Transaction"]);
string name1 = Convert.ToString(record["Client"]);
string location1 = Convert.ToString(record["Location"]);
foreach (var item2 in records)
{
Dictionary<string, object> record2 = item2.Value;
string transaction2 = Convert.ToString(record["Transaction"]);
string name2 = Convert.ToString(record["Client"]);
string location2 = Convert.ToString(record["Location"]);
if ((transaction1 == "BUY" && transaction2 == "SELL" || transaction1 == "SELL" && transaction2 == "BUY") && name1 == name2 && location1 == location2)
{
}
}
}