如何在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
如何做到这一点?
当然,我可以创建一个新的列表,手动迭代循环中的所有行来填充它,并将其转换为数组,但没有更简洁的方法吗?
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
异常。