Определите положение элемента в IQueryable

Ответ для "послушного", "потому что C++, в 03 Стандартах говорится поведение программы, не заканчивающейся в новой строке, не определен" (перефразируемый).

ответ для любопытного здесь: http://gcc.gnu.org/ml/gcc/2001-07/msg01120.html .

9
задан San 14 December 2009 в 05:40
поделиться

3 ответа

Сначала выберите каждый элемент с его индексом, затем отфильтруйте элементы и, наконец, извлеките исходный индекс:

var result = orderedList
    .Select((x, i) => new { Item = x, Index = i })
    .Where(itemWithIndex => itemWithIndex.Item.StartsWith("g"))
    .FirstOrDefault();

int index= -1;
if (result != null)
    index = result.Index;

Испытательный стенд:

class Program
{
    static void Main(string[] args)
    {
        var orderedList = new List<string>
        {
            "foo", "bar", "baz", "qux", "quux",
            "corge", "grault", "garply", "waldo",
            "fred", "plugh", "xyzzy", "thud"
        }.OrderBy(x => x);

        // bar, baz, corge, foo, fred, garply, grault,
        // plugh, quux, qux, thud, waldo, xyzzy
        // Find the index of the first element beginning with 'g'.

        var result = orderedList
            .Select((x, i) => new { Item = x, Index = i })
            .Where(itemWithIndex => itemWithIndex.Item.StartsWith("g"))
            .FirstOrDefault();

        int index= -1;
        if (result != null)
            index = result.Index;

        Console.WriteLine("Index: " + index);
    }
}

Вывод:

Index: 5
15
ответ дан 4 December 2019 в 12:19
поделиться

Вы можете использовать что-то вроде query.TakeWhile (x =>! MatchCondition (x)). Count () , хотя это приводит к перечислению предыдущих значений, что может быть не тем, что вам нужно.

2
ответ дан 4 December 2019 в 12:19
поделиться

Вы также можете использовать вариант функции "Where", которая включает индекс коллекции в качестве параметра функции предиката. См. MSDN для получения дополнительной информации.

var result = Enumerable.Range(0, 10).Where((x, i) => i == 6);

Версия может привести к пустому списку, если нет шестого элемента. Кроме того, это не оценивает предложение where, пока вы не переберете результат.

0
ответ дан 4 December 2019 в 12:19
поделиться
Другие вопросы по тегам:

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