Подтвердить что ты не робот

Как найти самую длинную строку в строке [], используя LINQ

У меня есть массив строк переменной длины. В настоящее время у меня есть цикл, который выполняет итерацию через массив, чтобы найти самую длинную строку в массиве. Можно ли использовать LINQ для более эффективного и/или более чистого способа?

4b9b3361

Ответ 1

Это будет не намного эффективнее, однако было бы немного более чистым сделать что-то вроде:

var strings = new string[] { "1", "02", "003", "0004", "00005" };

string longest = strings.OrderByDescending( s => s.Length ).First();

Выход: 00005

Ответ 2

strings.Aggregate(string.Empty, (seed, f) => f.Length > seed.Length ? f : seed);

Агрегатный синтаксис немного сложнее читать, чем другие методы, но, строго говоря, он более эффективен, чем другие подходы, которые я вижу здесь, поскольку он не требует сортировки. Просто реализация O (N).

EDIT: этот подход, как и большинство других, предполагает, что в вашем списке нет нулевых значений, чтобы f.Length не выбрала исключение null ref. Быстрый тернарный оператор (f!= Null? F.Length: 0) исправит это, если он был действителен для вашего перечисляемого.

Ответ 3

string [] strings;
return strings.OrderByDescending (s => s.Length).First ();

Ответ 4

string[] arr = new string[] { "a", "aa", "aaa" };

var longest = arr.Where(s => s.Length == arr.Max(m => m.Length)).First();

вывод aaa

Таким образом, код явно дает вам строку с максимальной длиной.

Ответ 5

Хотя это старый вопрос, я хотел бы добавить, что самый эффективный ответ не предоставляется. Это не один лайнер, но он самый быстрый и возвращает коллекцию самых длинных строк, которые не предоставляют OrderBy или Aggregate. Мэтт Эллен был самым близким с его ответом, но использование Макса в его "Где" делает его довольно медленным, когда вы работаете с большой коллекцией.

Правильный ответ должен быть:

int maxLength = collection.Max(x => x.Length);
string[] longestStrings = collection.Where(x => x.Length == maxLength).ToArray();

Рассмотрите возможность использования? (в С# 6.0) и?? операторы для проверки на нулевые значения, если ваша коллекция может содержать их.

Ответ 6

У меня нет компилятора прямо сейчас, но это также сработает.

string[] arr = new string[] { "a", "aa", "aaa" };
var longest = arr.Max(w => w.Length)