Una soluzione sarebbe utilizzare un elenco semplice, in cui ogni posizione nell'elenco rappresenta una posizione diversa per la quale si sta eseguendo la scansione. Nel codice, potrebbe sembrare qualcosa del genere (supponendo che tutti i numeri di posizione siano sequenziali):
** Nota: non ho ancora eseguito questo codice per assicurarmi che funzioni così com'è ... potrebbe anche essere necessario implementare un IEqualityComparer
su Range
in modo che l'operazione IndexOf
per restituire la posizione corretta:
public class Controller
{
List m_positions = new List();
public void LoadPositions()
{
m_positions.Add(new Range(0, 9));
m_positions.Add(new Range(10, 19));
m_positions.Add(new Range(20, 29));
}
public int GetPosition (int signal)
{
Range range = m_positions.Single(a => IsBetween(signal, a.Min, a.Max));
return m_positions.IndexOf(range);
}
private static bool IsBetween (int target, int min, int max)
{
return min = target;
}
}
probabilmente è abbastanza auto-esplicativo, ma per evitare qualsiasi confusione, ecco ciò che la classe Range
potrebbe essere simile:
public class Range
{
public Range(int min, int max)
{
this.Min = min;
this.Max = max;
}
public int Min
{
get;
private set;
}
public int Max
{
get;
private set;
}
}
Ulteriori spiegazioni renderebbero questa una risposta ideale. –
Buona risposta. Funzionerebbe con qualsiasi insieme di intervalli arbitrari che non hanno spazi vuoti tra loro. – jrista
Grazie, è possibile utilizzare qualcosa di simile a questo se le posizioni sono nominate piuttosto che un numero che aumenta di uno? – DNN