Sha256: 73b3cae2a983a65c0f5542940d59a43fafb1bbd50c4cadeb6b11ff9d264d7eae

Contents?: true

Size: 1.87 KB

Versions: 330

Compression:

Stored size: 1.87 KB

Contents

using System;
using System.Collections.Generic;
using System.Linq;

public static class ListOps
{
    private static List<T> Cons<T>(T x, List<T> input)
    {
        var list = new List<T>(input);
        list.Insert(0, x);

        return list;
    }

    public static int Length<T>(List<T> input)
    {
        return Foldl((acc, x) => acc + 1, 0, input);
    }

    public static List<T> Reverse<T>(List<T> input)
    {
        return Foldl((acc, x) => Cons(x, acc), new List<T>(), input);
    }

    public static List<TOut> Map<TIn, TOut>(Func<TIn, TOut> map, List<TIn> input)
    {
        return Foldr((x, acc) => Cons(map(x), acc), new List<TOut>(), input);
    }

    public static List<T> Filter<T>(Func<T, bool> predicate, List<T> input)
    {
        return Foldr((x, acc) => predicate(x) ? Cons(x, acc) : acc, new List<T>(), input);
    }

    public static TOut Foldl<TIn, TOut>(Func<TOut, TIn, TOut> func, TOut start, List<TIn> input)
    {
        var acc = start;

        foreach (var item in input)
            acc = func(acc, item);

        return acc;
    }

    public static TOut Foldr<TIn, TOut>(Func<TIn, TOut, TOut> func, TOut start, List<TIn> input)
    {
        var acc = start;

        for (var i = input.Count - 1; i >= 0; i--)
            acc = func(input[i], acc);

        return acc;
    }

    public static List<T> Concat<T>(List<List<T>> input)
    {
        var concatenated = new List<T>();

        foreach (var list in input)
            concatenated = Append(concatenated, list);

        return concatenated;
    }

    public static List<T> Append<T>(List<T> left, List<T> right)
    {
        var appended = new T[left.Count + right.Count];

        for (var i = 0; i < left.Count; i++)
            appended[i] = left[i];

        for (var j = 0; j < right.Count; j++)
            appended[left.Count + j] = right[j];

        return appended.ToList();
    }
}

Version data entries

330 entries across 330 versions & 1 rubygems

Version Path
trackler-2.2.1.155 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.154 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.153 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.152 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.151 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.150 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.149 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.148 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.147 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.146 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.145 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.144 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.143 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.142 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.141 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.140 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.139 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.138 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.137 tracks/csharp/exercises/list-ops/Example.cs
trackler-2.2.1.136 tracks/csharp/exercises/list-ops/Example.cs