Как получить 3 верхних элемента в массиве int с помощью LINQ?

Другая альтернатива System.arraycopy:

String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
13
задан Tot Zam 14 September 2017 в 05:50
поделиться

3 ответа

Как вы "проверяли, что внутри topThree"? Самый простой способ сделать это - распечатать их:

using System;
using System.Linq;

public class Test
{
    static void Main()        
    {
        int[] array = new int[7] { 1, 3, 5, 2, 8, 6, 4 };
        var topThree = (from i in array 
                        orderby i descending 
                        select i).Take(3);

        foreach (var x in topThree)
        {
            Console.WriteLine(x);
        }
    }
}

По-моему, все в порядке ...

Есть потенциально более эффективные способы поиска N верхних значений, чем сортировка, но это определенно сработает. Возможно, вы захотите использовать точечную нотацию для запроса, который делает только одно:

var topThree = array.OrderByDescending(i => i)
                    .Take(3);
26
ответ дан 1 December 2019 в 18:49
поделиться

Ваш код мне кажется подходящим, может быть, вы хотите вернуть результат в другой массив?

int[] topThree = array.OrderByDescending(i=> i)
                      .Take(3)
                      .ToArray();
13
ответ дан 1 December 2019 в 18:49
поделиться

Это связано с задержкой выполнения запроса linq.

Как предлагается, если вы добавите .ToArray () или .ToList () или аналогичные, вы получите правильный результат.

4
ответ дан 1 December 2019 в 18:49
поделиться
Другие вопросы по тегам:

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