在 C# 中初始化锯齿状数组

问题描述 投票:0回答:2

我正在尝试使用 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[][]”。存在显式转换(您是否缺少转换?)

c# linq jagged-arrays
2个回答
0
投票

LINQ 确实不是合适的工具,它用于迭代现有集合。把它想象成一个更奇特的 foreach 循环。

话虽这么说,通过使用

Enumerable.Range
你可以获得你想要的东西。

string[][] foo = Enumerable.Range(0, 10)
    .Select(i => Enumerable.Range(0, 10)
        .Select(j => "a")
        .ToArray())
    .ToArray();

这会给你一个 10x10 的数组,除了字母“a”之外什么都没有填充。

另外我要指出的是,LINQ 通常不仅不是一个错误的工具,而且它的可读性也不是很好。


0
投票

我想这就是你想要的:

public static string[][] computerBoard = Enumerable.Range(1, 10)
    .Select(x => Enumerable.Repeat("/*my letter*/", 10).ToArray())
    .ToArray();
© www.soinside.com 2019 - 2024. All rights reserved.