如何在C#中获取2D数组的列

本文关键字:2D 数组 获取 | 更新日期: 2023-09-27 17:59:22

var array = new[] {new[]{'a', 'b', 'c'}, new[]{'d', 'e', 'f'}, new[]{'g', 'h', 'i'}};
var column = // should be like new[]{'b', 'e', 'h'} given index 1

如何做到这一点?

当然,我可以创建一个新的列表,手动迭代循环中的所有行来填充它,并将其转换为数组,但没有更简洁的方法吗?

如何在C#中获取2D数组的列

LINQ是您的朋友。

这就是我们C#开发人员与普通人的区别。

var array = new[] { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } };
var col1 = array.Select(x => x[1]);
//col1 contains "b", "e" and "h"

您可以为此编写一个扩展方法:

public static T[] GetColumn<T>(this T[][] source, int columnIndex)
{
    int length = source.Length;
    var values = new T[length];
    for (int i = 0; i < length; i++)
    {
         if(source[i].Length > columnIndex)
            values[i] = source[i][columnIndex];
    }
    return values;
}

然后:

var column = array.GetColumn(1);

如果您的一个数组包含的元素少于列号,那么这也不会引发IndexOutOfRange异常。