我正在尝试使用 Linq 创建一个 10 x 10 的锯齿状数组,并且我想(暂时)使用相同的字母(而不是字符)填充它。但是,我无法弄清楚如何在同一个 Linq 语句中填充它。
我目前有:
public static string[][] computerBoard = new string[10][]
.Select(x => new string[10])
.ToArray();
这应该是可以的吧? 如果没有,我应该使用双 for 循环来填充它还是其他东西?
我尝试过这样做:
public static string[][] computerBoard = new string[10][]
.Select(x => new string[10]
.Select(y => y = "/*my letter*/"))
.ToArray();
但它给了我一个错误:
CS0226:无法将类型“System.Collections.Generic.Ienumerable[]”隐式转换为“string[][]”。存在显式转换(您是否缺少转换?)
LINQ 确实不是合适的工具,它用于迭代现有集合。把它想象成一个更奇特的 foreach 循环。
话虽这么说,通过使用
Enumerable.Range
你可以获得你想要的东西。
string[][] foo = Enumerable.Range(0, 10)
.Select(i => Enumerable.Range(0, 10)
.Select(j => "a")
.ToArray())
.ToArray();
这会给你一个 10x10 的数组,除了字母“a”之外什么都没有填充。
另外我要指出的是,LINQ 通常不仅不是一个错误的工具,而且它的可读性也不是很好。
我想这就是你想要的:
public static string[][] computerBoard = Enumerable.Range(1, 10)
.Select(x => Enumerable.Repeat("/*my letter*/", 10).ToArray())
.ToArray();