Существует ли функция Нижней границы на SortedList <K, V>?

После почти двух недель не думая о проблеме, я нашел решение. Просто нужно условие, когда устанавливать Позицию (поэтому я изменил закомментированную строку на эти):

if (mediaPlayer.Position > TimeSpan.FromSeconds(value + 1) || mediaPlayer.Position < TimeSpan.FromSeconds(value - 1))  
            mediaPlayer.Position = TimeSpan.FromSeconds(value);

Хотя требуется хотя бы 1 секунда изменения, таким образом, программа игнорирует откаты в миллисекундах, что вызывает заикание, пока ползунок все еще перетаскивается.

23
задан nawfal 11 June 2014 в 13:17
поделиться

4 ответа

Двоичный поиск SortedList.Keys набор.

Здесь мы идем. Это - O (журнал n):

private static int BinarySearch<T>(IList<T> list, T value)
{
    if (list == null)
        throw new ArgumentNullException("list");
    var comp = Comparer<T>.Default;
    int lo = 0, hi = list.Count - 1;
    while (lo < hi) {
            int m = (hi + lo) / 2;  // this might overflow; be careful.
            if (comp.Compare(list[m], value) < 0) lo = m + 1;
            else hi = m - 1;
    }
    if (comp.Compare(list[lo], value) < 0) lo++;
    return lo;
}

public static int FindFirstIndexGreaterThanOrEqualTo<T,U>
                          (this SortedList<T,U> sortedList, T key)
{
    return BinarySearch(sortedList.Keys, key);
}
21
ответ дан 29 November 2019 в 02:46
поделиться

Я пошел бы с LINQ (предположение, что Вы используете C#3), но используете перегрузку FirstOrDefault, который берет предикат:

first = sortedList.FirstOrDefault(x => x >= theObjectForComparison);

(много других Счетных методов может также взять предикаты, который является хорошим ярлыком)

4
ответ дан 29 November 2019 в 02:46
поделиться

Не знающий один, но это - простой оператор LINQ:

first = sortedList.Where(x => x >= theObjectForComparison).FirstOrDefault();

first или будет первый объект, который передает сравнение или default(T) (который обычно является null).

Редактирование

версия DaveW:

first = sortedList.FirstOrDefault(x => x >= theObjectForComparison);

делает то же задание, но мог потенциально быть быстрее, необходимо будет протестировать его все же.

3
ответ дан 29 November 2019 в 02:46
поделиться

Или можно записать собственный дополнительный метод, чтобы сделать это. Обратите внимание, что все те функции, КАК гарантируют, не войдут в sequesce.

0
ответ дан 29 November 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: