Puede usar el tipo de lista para contener los pares, ordenarlos y usar List.BinarySearch.
Por ejemplo, podría tener algo como lo siguiente:
struct Pair
{
public Pair(DateTime t, int v)
{
date = t;
value = v;
}
public DateTime date;
public int value;
}
....
List<Pair> pairs = new List<Pair>();
pairs.Add(new Pair(DateTime.Now, 100));
pairs.Add(new Pair(DateTime.Now, 200));
....
// Sort using the time.
pairs.Sort(delegate(Pair pair1, Pair pair2) {
return pair1.date.CompareTo(pair2.date);
}
);
// Do binary search.
int index = pairs.BinarySearch(new Pair(dateToSearch, 0),
delegate(Pair pair1, Pair pair2) {
return pair1.date.CompareTo(pair2.date);
});
if (index >= 0) {
// Found the element!
return pairs[index].value;
}
// If not found, List.BinarySearch returns the complement
// of the index where the element should have been.
index = ~index;
// This date search for is larger than any
if (index == pairs.Count) {
//
}
// The date searched is smaller than any in the list.
if (index == 0) {
}
// Otherwise return average of elements at index and index-1.
return (pairs[index-1].value + pairs[index].value)/2;
Por supuesto, el código no es la mejor posible, pero usted consigue la idea: utilizar la lista, clasificar y luego hacer BinarySearch.
Buscar MSDN para obtener más información.
Lista: http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx
list.sort: http://msdn.microsoft.com/en-us/library/3da4abas.aspx
List.BinarySearch: http://msdn.microsoft.com/en-us/library/3f90y839.aspx
quería ver si había alguna forma más rápida de hacerlo, además de una búsqueda lineal – leora
Hay, como alguien aquí menciona: si su lista está ordenada, puede hacer una búsqueda binaria. –