Non riesco a trovare un puntatore nella giusta direzione, non sono nemmeno sicuro di quali siano i termini che dovrei ricercare ma innumerevoli ore di googling sembrano girarmi in tondo , quindi spero che l'alveare collettivo di intelligence di Stack Overflow possa essere d'aiuto.Hai bisogno di una guida verso l'albero logico booleano valutativo
Il problema è questo, ho bisogno di un modo per filtrare i dati in ciò che posso solo chiamare un albero logico composto. Attualmente il sistema implementa un semplice sistema di filtraggio AND. Ad esempio, diciamo che abbiamo un set di dati di persone. Aggiungi un gruppo di filtri in modo da mostrare tutte le persone in cui (Sesso = Femmina) AND (Età> 23) E (Età < 30) E (Stato = Singolo). Abbastanza facile, iterare attraverso ogni elemento, aggiungere ad una collezione di articoli valida solo se ogni condizione è vera.
Il problema che sto incontrando è come gestisco l'utente che è in grado di compilare query complesse coinvolte in e e o? Sto pensando a qualcosa come un albero in cui ogni nodo rappresenta ed espressione che valuta i suoi figli a vero o falso. Un esempio semplicistico potrebbe essere: filtrare fino a ((Sex == Male AND Age == 25) OR (Sex == Female AND Status == Single)) E IQ> 120. Scusa Non riesco a pensare ad un esempio migliore a il momento. Ma come andresti a rappresentare questo tipo di albero delle espressioni e a valutare gli elementi in una raccolta rispetto a questi filtri. Quali sono alcuni riferimenti che potrebbero aiutare? Accidenti, quali sono alcune dannate ricerche di Google che potrebbero portare a una direzione positiva ?!
Grazie a chiunque possa fornire aiuto.
Ecco un esempio di una query composti sotto forma dell'albero utilizzando un set di dati di persone
- Query - Mostrami tutte le persone dove il sesso è un uomo e gli occhi sono verdi o il sesso è di sesso femminile, gli occhi sono blu, o lo stato è singolo. In forma Paren (Sesso == Maschio & & Occhi == Verde) || (Sesso == femmina & & (Occhi Blu == || Stato == singolo))
Così in forma di albero im Pensando
o-Root Node
- And - Sex = Male
- And - Eyes = Blue
- Or - Sex = Female
- And Eyes = Blue
- Or Status = Single
Credo che la soluzione è quella di rappresentare ogni nodo come in una struttura di dati come
Node
{
OpType - AND or OR
ExpressionField - The field to evaluate
ExpressionOp - =, !=, >, >=, <, <=
ExpressionValue - the value to compare the field's value against
Function Evaluate() - returns a bool
}
Così, per un dato nodo, valutare le chilren, se sei un nodo e, poi tornare vero se i risultati di espressione in un vero e tutti i tuoi e bambini restituiscono true o qualsiasi O il bambino è valutato come vero e recitato.
Sembra soddisfare tutte le condizioni concettuali che posso lanciare, ma da quando lo implementerò. Pubblicherò il codice reale più tardi quando funziona e le immagini per aiutare a descrivere meglio questo problema per gli altri.
Suggerisco di chiarire in che forma si trovano i dati: SQL db? Presumo che il tag "as3" si riferisca ad ActionScript 3: in tal caso, stai davvero cercando tecniche specifiche per C# o AS3, o solo per "teoria"? – BillW
I dati sono in memoria, anche se tecnicamente l'implementazione è sia in flash che in silverlight, sono molto più interessato a capire la soluzione generale rispetto a un'implementazione specifica. Il nodo del problema consiste nel presentare all'utente un'interfaccia utente che consenta loro di creare dinamicamente una query complessa per filtrare il set di dati. Ho bisogno di una solida struttura dati per rappresentare la query. Finora ho il seguente per un nodo - Tipo - And o Or - Il campo - il campo del dataset questo nodo si rivolge - Funzionamento -! =, =,>, < <=, > = - Valore - il valore per applicare l'operazione contro – JTtheGeek
spiegazione più chiara! Vi suggerisco di chiarire se la struttura dei dati è in C#/SilverLight: in tal caso, presumo che userete Linq per eseguire il "sollevamento pesante". Se sei già di alto livello con Linq, usando lambdas, metodi anonimi, ecc., Questa è una cosa: se non lo sei, puoi ottenere un buon consiglio su SO (se lo chiedi) sulle risorse di studio di Linq (imho Jon "C# in Depth" di Skeet è il miglior libro di C# sul pianeta con una superba copertura di Linq). Questo può essere irrilevante per la tua idea, ma puoi usare un dizionario con "qualsiasi cosa" come chiavi e metodi eseguibili (anonimi) come Valori. - BillW – BillW