如何在 C# 中连接二维数组中的索引

How to join indexes in an 2D array in C#

是否有一种有效的方法来连接数组中的块,如下所示:

original_array = [[1,2], [4,7], [8,10], [15,20], [21,25]]

new_array = [[1,2], [4,10], [15,25]]

基本上我想加入一个数组的 2 个索引,如果它们之间的距离是 1。

我试过类似的方法,但没有用。

                int[,] new_array = new int[500, 2];
                int new_var = 0;
                for (int k = 0; k < original_indexes; k++)
                {
                    int dista = original_array [k + 1, 0] - original_array [k, 1];
                    if (dista < 10)
                    {
                        new_array[k, 0] = original_array[k, 0];
                        new_array[k, 1] = original_array[k + 1, 1];
                        new_var++;
                    }
                    else
                    {
                        new_array[k, 0] = original_array[k + new_var, 0];
                        new_array[k, 1] = original_array[k + new_var, 1];
                    }
                }

抱歉,我不知道如何更具体,我什至不知道如何搜索这个。

您可以尝试这样的操作:

    using System.Linq;

    ...
 
    private static int[,] MyCombine(int[,] source) {
      List<int[]> list = new List<int[]>();

      int[] last = null;

      for (int r = 0; r < source.GetLength(0); ++r) 
        if (last == null || last[1] + 1 < source[r, 0]) {
          if (last != null)
            list.Add(last);

          last = new int[] { source[r, 0], source[r, 1] };
        }
        else
          last[1] = source[r, 1];
      
      if (last != null)
        list.Add(last);

      int[,] result = new int[list.Count, 2];

      for (int r = 0; r < list.Count; ++r)
        for (int c = 0; c < list[r].Length; ++c)
          result[r, c] = list[r][c];

      return result;
    }

演示:

  int[,] original = new int[,] {
    { 1,  2 },
    { 4,  7 },
    { 8, 10 },
    {15, 20 },
    {21, 25 },
  };

  int[,] result = MyCombine(original);

  string report = "[" + string.Join(", ", Enumerable
    .Range(0, result.GetLength(0))
    .Select(r => $"[{result[r, 0]}, {result[r, 1]}]")) + "]";

  Console.Write(report);

结果:

 [[1, 2], [4, 10], [15, 25]]