【问题标题】:Converting JavaScript to C# - arrays将 JavaScript 转换为 C# - 数组
【发布时间】:2013-11-01 02:01:54
【问题描述】:

我是 C# 的新手,在转换某些数组类型时遇到了麻烦。

JavaScript 代码:

function toMatrix(list, elementsPerSubArray) {
    var matrix = [], i, k;
    for (i = 0, k = -1; i < list.length; i++) {
        if (i % elementsPerSubArray === 0) {
            k++;
            matrix[k] = [];
        }
        matrix[k].push(list[i]);
    }
    return matrix;
}

我尝试过转换代码,但我在 C# 中遇到了数组问题。

这对某些人来说可能很容易,我该怎么做?

谢谢。

【问题讨论】:

    标签: c# javascript arrays


    【解决方案1】:

    Linq 版本如下所示。

    using System.Linq;
    using System.Collections.Generic;
    
    public T[][] ToMatrix<T>(T[] array, int elementsPerSubArray)
    {
        var list = new List<T[]>();
        while (array.Any())
        {
            list.Add(array.Take(elementsPerSubArray).ToArray());
            array = array.Skip(elementsPerSubArray).ToArray();
        }
        return list.ToArray();
    }
    

    转回一行就可以实现:

    public T[] ToArray<T>(T[][] matrix)
    {
        return matrix.Aggregate(new T[0], (array, matrixRow) => array.Concat(matrixRow).ToArray());
    }
    

    【讨论】:

      【解决方案2】:

      这是一个尝试。我为项目类型使用了一个通用参数:

      List<List<T>> toMatrix<T>(List<T> list, int elementsPerSubArray) 
      {
          var matrix = new List<List<T>>();
          int k = -1;
          for (int i = 0 ; i < list.Length; i++) 
          {
              if (i % elementsPerSubArray == 0) 
              {
                  k++;
                  matrix.Add(new List<T>());
              }
              matrix[k].Add(list[i]);
          }
          return matrix;
      }
      

      测试:

      List<int> input = new List<int> { 1, 2, 3, 4, 5, };
      var result = toMatrix(input, 2);
          foreach (var outer in result)
              Console.WriteLine(string.Join(", ", outer));
      

      (Demo on Ideone)

      【讨论】:

      • matrix.Aggregate(new T[0], (array, matrixRow) =&gt; array.Concat(matrixRow).ToArray());。这就是我喜欢 Linq 的原因:它是对世界的函数式编程视图的一瞥,以最初的面向对象语言实现。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 2014-07-13
      • 2013-02-12
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      相关资源
      最近更新 更多