簡體   English   中英

如何在C#中遍歷2D數組的每個對角線?

[英]How can I go through every diagonal of a 2D array in C#?

我有一個類型為int [5,6]的數組。

   abcdef
   bcdefg
   cdefgh
   defghi
   efghij

我想將值彼此加起來,例如: myArray[1,2]+ myArray[2,1]myArray[1,3]+ myArray[2,2]+ myArray[3,1]

我如何以這種方式經歷它:

a
bb
ccc
dddd
eeeee
ffffff
ggggggg

.. 等等?

通用解決方案

public static IList<IList<T>> GetSecondaryDiagonals<T>(this T[,] array2d)
{
    int rows = array2d.GetLength(0);
    int columns = array2d.GetLength(1);

    var result = new List<IList<T>>();            

    // number of secondary diagonals
    int d = rows + columns - 1;
    int r, c;

    // go through each diagonal
    for (int i = 0; i < d; i++)
    {
        // row to start
        if (i < columns)
            r = 0;
        else
            r = i - columns + 1;
        // column to start
        if (i < columns)
            c = i;
        else
            c = columns - 1;

        // items from diagonal
        var diagonalItems = new List<T>();
        do
        {
            diagonalItems.Add(array2d[r, c]);
            r++;
            c--;
        } 
        while (r < rows && c >= 0);
        result.Add(diagonalItems);
    }

    return result;
}

使用示例

private static void Main()
{
    var T1 = new char[,] // more rows than columns
        {
            {'a', 'b', 'd'},
            {'c', 'e', 'g'},
            {'f', 'h', 'j'},
            {'i', 'k', 'l'},
        };

    var T2 = new int[,] // more columns than rows
        {
            {1, 2, 4, 7},
            {3, 5, 8, 0},
            {6, 9, 1, 2},
        };

    Print(T1.GetSecondaryDiagonals());
    Print(T2.GetSecondaryDiagonals());
    Console.ReadKey();
}

static void Print<T> (IList<IList<T>> list)
{
    Console.WriteLine();
    foreach (var sublist in list)
    {
        foreach (var item in sublist)
        {
            Console.Write(item);
            Console.Write(' ');
        }
        Console.WriteLine();
    }
}

輸出

a
b c
d e f
g h i
j k
l

1
2 3
4 5 6
7 8 9
0 1
2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM