Tuples, Tuples – Returning multiple results from a function (C#)

I have no idea of how many times I had to write a function do discover the minimum and the maximum value of a sequence.

I just love the way I can do it now, using C#.

public static class EnumerableExtensions
{
    public static (T min, T max) MinMax<T>(this IEnumerable<T> source)
        where T : IComparable<T>
    {
        using (var iterator = source.GetEnumerator())
        {
            if (!iterator.MoveNext())
            {
                throw new InvalidOperationException("Cannot find min/max of an empty sequence.");
            }

            var result = (min: iterator.Current, max: iterator.Current);
            while (iterator.MoveNext())
            {
                if (iterator.Current.CompareTo(result.min) < 0) result.min = iterator.Current;
                if (iterator.Current.CompareTo(result.max) > 0) result.max = iterator.Current;
            }
            return result;
        }
    }
}

Pretty nice, right?!

class Program
{
    static void Main(string[] args)
    {
        var sequence = Enumerable.Range(10, 1000000);
        var minmax = sequence.MinMax();
        Console.WriteLine($"Min: {minmax.min} Max: {minmax.max}");
    }
}

That’s it.

Compartilhe este insight:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Elemar Júnior

Sou fundador e CEO da EximiaCo e atuo como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Elemar Júnior

Sou fundador e CEO da EximiaCo e atuo como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Mais insights para o seu negócio

Veja mais alguns estudos e reflexões que podem gerar alguns insights para o seu negócio:

Neste post, vou compartilhar como dar os primeiros passos com OpenCV, rapidamente, usando Visual Studio 2017 e VcPkg. O que...
A pergunta do título, embora simples, não é fácil de responder. De qualquer forma, o conhecimento necessário para respondê-la é...
Retomar em plenitude todas as atividades econômicas, aumentando o risco de contágio pelo novo coronavírus e, eventualmente, sacrificar uma parcela...
Em minhas consultorias, quando questionado sobre escalabilidade, recorro sempre ao scale cube, compartilhado no excelente livro “The Art of Scalability”,...
Um erro imperdoável, na implementação de microsserviços é considerar que a conexão é estável e confiável. Por razões variadas, a...
This one comes from Ayende’s book about RavenDB. If you want to learn RavenDB basics, I would recommend you to...
× Precisa de ajuda?