99 votes

Équivalent F # List.map en C #?

Existe-t-il un équivalent de la fonction List.map de F # en C #? c'est-à-dire appliquer une fonction à chaque élément de la liste et renvoyer une nouvelle liste contenant les résultats.

Quelque chose comme:

     public static IEnumerable<TResult> Map<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> funky)
	{
		foreach (TSource element in source)
			yield return funky.Invoke(element);
	}
 

Existe-t-il déjà un chemin intégré ou devrais-je simplement écrire l'extension personnalisée?

171voto

Marc Gravell Points 482669

C'est LINQ's Select - c'est à dire

 var newSequence = originalSequence.Select(x => {translation});
 

ou

 var newSequence = from x in originalSequence
                  select {translation};
 

25voto

codeape Points 38576

ConvertAll est la fonction intégrée:

 public List<TOutput> ConvertAll<TOutput>(
    Converter<T, TOutput> converter
)
 

Disponible depuis .NET version 2.0.

Exemple de code MSDN:

 using System;
using System.Drawing;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        List<PointF> lpf = new List<PointF>();

        lpf.Add(new PointF(27.8F, 32.62F));
        lpf.Add(new PointF(99.3F, 147.273F));
        lpf.Add(new PointF(7.5F, 1412.2F));

        Console.WriteLine();
        foreach( PointF p in lpf )
        {
            Console.WriteLine(p);
        }

        List<Point> lp = lpf.ConvertAll( 
            new Converter<PointF, Point>(PointFToPoint));

        Console.WriteLine();
        foreach( Point p in lp )
        {
            Console.WriteLine(p);
        }
    }

    public static Point PointFToPoint(PointF pf)
    {
        return new Point(((int) pf.X), ((int) pf.Y));
    }
}

/* This code example produces the following output:

{X=27.8, Y=32.62}
{X=99.3, Y=147.273}
{X=7.5, Y=1412.2}

{X=27,Y=32}
{X=99,Y=147}
{X=7,Y=1412}
 */
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X