Re[7]: BinarySearch со значением поля на входе
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.03.25 11:02
Оценка:
Здравствуйте, m2user, Вы писали:

M>Можно написать свою, а можно взять ArrayList.Adapter, как я предлагаю выше.

M>Однако это не является достаточным для решения задачи ТС.
M>Т.к. ему нужно искать по значению поля (T value у него нет)

Ну это просто мне было влом самому писать, а ИИ тупанул чутка. Без параметра легко можно обойтись:

public static int BinarySearch<T>(this IList<T> list, Func<T, int> comparer)
{
    var left = 0;
    var right = list.Count - 1;

    while (left <= right)
    {
        var mid = left + (right - left) / 2;
        var cmp = comparer(list[mid]);

        if (cmp == 0)
            return mid;

        if (cmp < 0)
            right = mid - 1;
        else
            left = mid + 1;
    }

    return ~left; // индекс вставки с битовым дополнением
}


M>А значит в любом случае нужна какая-то обертка над T или IList<T> ("овердизайн"), либо хитрый comparer ("костыли").


Думать немножко надо.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 01.04.2025 11:27 VladD2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.