Почему у SortedList в C # нет метода Find? - PullRequest
2 голосов
/ 29 августа 2010

Глупо, если ты спросишь меня. Но это сообщение здесь, потому что я буду считать (вероятно, правильно), что я глупый, а не Microsoft. Итак ... что-то мне не хватает? Почему они не включили метод «Найти» для этого ребенка? Находка может работать со значениями, которые являются объектами, поэтому я мог бы сделать это:

someObject = SortedList.Values.Find(order => order.OrderID == orderID);

Ответы [ 3 ]

5 голосов
/ 29 августа 2010

Вы, вероятно, хотите:

SortedList.Values.Cast<Order>().FirstOrDefault(order => order.OrderID == orderID);

Конечно, если вы говорите о SortedList<TKey, TValue>, звонок на Cast() не нужен.

Кстати, если вы просматриваетеValues из SortedList таким образом, есть большая вероятность, что вы используете неправильный выбор для ключа / используете неверную структуру данных в целом.

РЕДАКТИРОВАТЬ:

Если вы не можете использовать LINQ в проекте и не хотите поддерживать отдельные структуры данных с ключами, соответственно, датой заказа и идентификатором заказа (как предложил Бен Фойгт), я не вижу другого выбора, кроме какосуществить поиск самостоятельно:

foreach(ShopOrder order in sortedList.Values)
{
  if(order.OrderID == orderID) return order;
}

return null; // or throw an exception, whichever you find appropriate.

Если вы хотите обобщить дальше, напишите свою собственную реализацию FirstOrDefault.

5 голосов
/ 29 августа 2010

Возможно, вы ищете .First(...) или .Single(...) (или их OrDefault варианты) в LINQ, но это действительно хорошо работает только с типами, реализующими IEnumerable<T>. SortedList не является строго типизированным, поэтому лямбда не будет работать. Посмотрите на LINQ .Cast<T>().

1 голос
/ 29 августа 2010

Вы ищете в том же поле, по которому отсортирован список?Бинарный поиск будет самым быстрым, и SortedList предоставляет для этого функцию IndexOfKey.

Похоже, что вы просматриваете значения, в этом случае с помощью LINQ FirstOrDefault по результату GetValueList должно работать.

См. Также: http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/55241049-7e7e-4006-8e04-70779698d609

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...