Beispiel #1
0
        public static TSource Last <TSource>(this TSource[,] source, Predicate <TSource> predicate)
        {
            if (source == null || predicate == null)
            {
                throw new ArgumentNullException();
            }

            bool    found = false;
            TSource elem  = default(TSource);

            foreach (TSource t in source)
            {
                if (predicate(t))
                {
                    elem  = t;
                    found = true;
                }
            }

            if (found)
            {
                return(elem);
            }
            else
            {
                throw new ArgumentException();
            }
        }
Beispiel #2
0
 private static IEnumerable <TSource> CreateColumnIterator <TSource> (TSource[,] self, int i, int cols)
 {
     for (int j = 0; j < cols; ++j)
     {
         yield return(self [i, j]);
     }
 }
        /// <summary>
        /// Gets the number of rows in <paramref name="source" />.
        /// </summary>
        /// <typeparam name="TSource">The type of the elements of <paramref name="source" />.</typeparam>
        /// <param name="source">The two dimension array to get the row count on.</param>
        /// <returns>The number of rows in <paramref name="source" />.</returns>
        /// <exception cref="T:System.ArgumentNullException"><paramref name="source" /> is null.</exception>
        public static int GetRowCount <TSource>(this TSource[,] source)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            return(source.GetLength(1));
        }
Beispiel #4
0
        public static IEnumerable <IEnumerable <TSource> > Rows <TSource> (this TSource[,] self)
        {
            Check.Self(self);

            int rows = self.GetLength(0);
            int cols = self.GetLength(1);

            return(CreateRowsIterator(self, rows, cols));
        }
 public static IEnumerable <TResult> ToQueryable <TSource, TResult>(this TSource[,] source, Func <int, int, TSource, TResult> conversionFunc)
 {
     for (int y = 0; y < source.GetLength(0); ++y)
     {
         for (int x = 0; x < source.GetLength(1); ++x)
         {
             yield return(conversionFunc(x, y, source[y, x]));
         }
     }
 }
Beispiel #6
0
 public static void Populate <TSource>(this TSource[,] source, TSource value)
 {
     for (var i = 0; i < source.GetLength(0); i++)
     {
         for (var j = 0; j < source.GetLength(1); j++)
         {
             source[i, j] = value;
         }
     }
 }
        /// <summary>
        /// Retrieves a particular row by <paramref name="rowNumber" />.
        /// </summary>
        /// <typeparam name="TSource">The type of the elements of <paramref name="source" />.</typeparam>
        /// <param name="source">The two dimension array to retrieve the row from.</param>
        /// <param name="rowNumber">Number of row to retrieve. First row is zero.</param>
        /// <returns>Row at number <paramref name="rowNumber" />.</returns>
        /// <exception cref="T:System.ArgumentNullException"><paramref name="source" /> is null.</exception>
        public static TSource[] GetRow <TSource>(this TSource[,] source, int rowNumber)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            return(Enumerable.Range(0, source.GetColumnCount())
                   .Select(e => source[e, rowNumber])
                   .ToArray());
        }
 public static TResult[,] MapArray2d <TSource, TResult>(this TSource[,] source, Func <TSource, TResult> mapper)
 {
     TResult[,] result = new TResult[source.GetLength(0), source.GetLength(1)];
     for (int i = 0; i < source.GetLength(0); i++)
     {
         for (int j = 0; j < source.GetLength(1); j++)
         {
             result[i, j] = mapper(source[i, j]);
         }
     }
     return(result);
 }
Beispiel #9
0
    public static TResult[,] Select <TSource, TResult>(this TSource[,] sourceMatrix, Func <TSource, TResult> selector)
    {
        var map = new TResult[sourceMatrix.GetLength(0), sourceMatrix.GetLength(1)];

        foreach (var(x, y, value) in EveryPointIn(sourceMatrix))
        {
            var newValue = selector(value);
            map[x, y] = newValue;
        }

        return(map);
    }
Beispiel #10
0
 /// <summary>
 /// 将二维数组中的每个元素投影到新二维数组。
 /// </summary>
 /// <typeparam name="TSource">source 的元素类型。</typeparam>
 /// <typeparam name="TResult">selector 返回的值的类型</typeparam>
 /// <param name="source">一个二维数组,要对该二维数组调用转换函数</param>
 /// <param name="selector">应用于每个元素的转换函数</param>
 /// <returns></returns>
 public static TResult[,] Select <TSource, TResult>(this TSource[,] source, Func <TSource, TResult> selector)
 {
     TResult[,] result = new TResult[source.GetLength(0), source.GetLength(1)];
     for (int x = 0; x < source.GetLength(0); x++)
     {
         for (int y = 0; y < source.GetLength(1); y++)
         {
             result[x, y] = selector(source[x, y]);
         }
     }
     return(result);
 }
    public static TResult[,] ConvertAll <TSource, TResult>(this TSource[,] source, Func <TSource, TResult> projection)
    {
        var result = new TResult[source.GetLength(0), source.GetLength(1)];

        for (int x = 0; x < source.GetLength(0); x++)
        {
            for (int y = 0; y < source.GetLength(1); y++)
            {
                result[x, y] = projection(source[x, y]);
            }
        }
        return(result);
    }
Beispiel #12
0
        public static TResult[,] TwoDimSelect <TSource, TResult>(this TSource[,] array, Func <TSource, TResult> selector)
        {
            var result = new TResult[array.GetLength(0), array.GetLength(1)];

            for (var x = 0; x < array.GetLength(0); x++)
            {
                for (var y = 0; y < array.GetLength(1); y++)
                {
                    result[x, y] = selector(array[x, y]);
                }
            }

            return(result);
        }
Beispiel #13
0
        public static TResult[,] SelectArray <TSource, TResult>(this TSource[,] source, Func <TSource, TResult> selector)
        {
            var lengths = source.GetDimensionLengths();
            var result  = new TResult[lengths[0], lengths[1]];

            for (int i = 0; i < lengths[0]; i++)
            {
                for (int j = 0; j < lengths[1]; j++)
                {
                    result[i, j] = selector(source[i, j]);
                }
            }

            return(result);
        }
Beispiel #14
0
        public static IEnumerable <TResult> SelectMany <TSource, TResult>(this TSource[,] source, Func <TSource, IEnumerable <TResult> > selector)
        {
            if (source == null || selector == null)
            {
                throw new ArgumentNullException();
            }

            foreach (TSource elem in source)
            {
                foreach (TResult result in selector(elem))
                {
                    yield return(result);
                }
            }
        }
Beispiel #15
0
        public static IEnumerable <TSource> Where <TSource>(this TSource[,] source, Predicate <TSource> predicate)
        {
            if (source == null || predicate == null)
            {
                throw new ArgumentNullException();
            }

            foreach (TSource elem in source)
            {
                if (predicate(elem))
                {
                    yield return(elem);
                }
            }
        }
        public static TResult[,] Cast <TSource, TResult>(this TSource[,] self, Func <TSource, TResult> cast)
        {
            var m      = self.GetLength(0);
            var n      = self.GetLength(1);
            var matrix = new TResult[m, n];

            for (var i = 0; i < m; i++)
            {
                for (var j = 0; j < n; j++)
                {
                    matrix[i, j] = cast(self[i, j]);
                }
            }
            return(matrix);
        }
    public static TResult[,] ConvertAll <TSource, TResult>(
        this TSource[,] array, Converter <TSource, TResult> converter)
    {
        Contracts.Requires.That(array != null);
        Contracts.Requires.That(converter != null);

        var result = array.GetDimensions().CreateArray <TResult>();

        foreach (var pair in array.GetIndexValuePairs())
        {
            result[pair.Key.X, pair.Key.Y] = converter(pair.Value);
        }

        return(result);
    }
        /// <summary>
        /// Populates every element of the two dimension array with <paramref name="value" />.
        /// </summary>
        /// <typeparam name="TSource">Array element type.</typeparam>
        /// <param name="source">The array to populate.</param>
        /// <param name="value">The value to populate the array with.</param>
        /// <exception cref="T:System.ArgumentNullException"><paramref name="source" /> is null.</exception>
        public static void Populate <TSource>(this TSource[,] source, TSource value)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            for (var i = 0; i < source.GetLength(0); i++)
            {
                for (var j = 0; j < source.GetLength(1); j++)
                {
                    source[i, j] = value;
                }
            }
        }
Beispiel #19
0
        /// <summary>シーケンスの各要素を新しいフォームに射影します。</summary>
        /// <param name="source">変換関数を呼び出す対象となる値のシーケンス。</param>
        /// <param name="selector">各要素に適用する変換関数。</param>
        /// <exception cref="ArgumentNullException"></exception>
        public static IEnumerable <TResult> Select <TSource, TResult>(this TSource[,] source, Func <TSource, int, int, TResult> selector)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (selector == null)
            {
                throw new ArgumentNullException(nameof(selector));
            }

            return(from x in Enumerable.Range(0, source.GetLength(0))
                   from y in Enumerable.Range(0, source.GetLength(1))
                   select selector(source[x, y], x, y));
        }
Beispiel #20
0
        /// <summary>
        /// Elementwise application of a function
        /// </summary>
        /// <param name="input">Data</param>
        /// <param name="func">The function</param>
        /// <returns>Result</returns>
        public static TTarget[,] Map <TSource, TTarget>(this TSource[,] input, System.Func <TSource, TTarget> func)
        {
            int w = input.GetLength(0);
            int h = input.GetLength(1);

            TTarget[,] output = new TTarget[w, h];

            for (int x = 0; x < w; x++)
            {
                for (int y = 0; y < h; y++)
                {
                    output[x, y] = func(input[x, y]);
                }
            }
            return(output);
        }
Beispiel #21
0
        public static bool Contains <TSource>(this TSource[,] source, TSource value)
        {
            if (source == null)
            {
                throw new ArgumentNullException();
            }

            foreach (TSource t in source)
            {
                if (t.Equals(value))
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #22
0
        public static bool Any <TSource>(this TSource[,] source, Predicate <TSource> predicate)
        {
            if (source == null || predicate == null)
            {
                throw new ArgumentNullException();
            }

            foreach (TSource t in source)
            {
                if (predicate(t))
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #23
0
        //2D array map function
        public static TDest[,] Map <TSource, TDest>(TSource[,] source, Func <TSource, TDest> func)
        {
            int width  = source.GetLength(0);
            int height = source.GetLength(1);

            TDest[,] result = new TDest[width, height];

            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    result[i, j] = func(source[i, j]);
                }
            }

            return(result);
        }
Beispiel #24
0
        public static IEnumerable <TSource> Skip <TSource>(this TSource[,] source, int count)
        {
            if (source == null)
            {
                throw new ArgumentNullException();
            }

            int index = 0;

            foreach (TSource elem in source)
            {
                if (++index > count)
                {
                    yield return(elem);
                }
            }
        }
Beispiel #25
0
        public static TSource First <TSource>(this TSource[,] source, Predicate <TSource> predicate)
        {
            if (source == null || predicate == null)
            {
                throw new ArgumentNullException();
            }

            foreach (TSource t in source)
            {
                if (predicate(t))
                {
                    return(t);
                }
            }

            throw new ArgumentException();
        }
Beispiel #26
0
        public static TResult[ , ] MapLoop <TSource, TResult>(
            this TSource [ , ] src
            , Func <TSource, TResult> fn)
        {
            int row = src.GetLength(0);
            int col = src.GetLength(1);

            TResult[,] result = new TResult[row, col];

            for (int j = 0; j < row; j++)
            {
                for (int i = 0; i < col; i++)
                {
                    result[j, i] = fn(src [j, i]);
                }
            }
            return(result);
        }
Beispiel #27
0
        public static IEnumerable <TSource> SkipWhile <TSource>(this TSource[,] source, Predicate <TSource> predicate)
        {
            if (source == null)
            {
                throw new ArgumentNullException();
            }

            bool skip = true;

            foreach (TSource elem in source)
            {
                if (!skip || !predicate(elem))
                {
                    skip = false;
                    yield return(elem);
                }
            }
        }
Beispiel #28
0
        public static TSource Min <TSource>(this TSource[,] source) where TSource : IComparable <TSource>
        {
            if (source == null)
            {
                throw new ArgumentNullException();
            }

            TSource min = source[0, 0];

            foreach (TSource t in source)
            {
                if (t.CompareTo(min) < 0)
                {
                    min = t;
                }
            }

            return(min);
        }
Beispiel #29
0
        public static int Count <TSource>(this TSource[,] source, Predicate <TSource> predicate)
        {
            if (source == null || predicate == null)
            {
                throw new ArgumentNullException();
            }

            int nb = 0;

            foreach (TSource t in source)
            {
                if (predicate(t))
                {
                    nb++;
                }
            }

            return(nb);
        }
Beispiel #30
0
        public static TResult Min <TSource, TResult>(this TSource[,] source, Func <TSource, TResult> selector) where TResult : IComparable <TResult>
        {
            if (source == null)
            {
                throw new ArgumentNullException();
            }

            TResult min = selector(source[0, 0]);

            foreach (TSource t in source)
            {
                TResult elem = selector(t);
                if (elem.CompareTo(min) < 0)
                {
                    min = elem;
                }
            }

            return(min);
        }