linq 使用相同的非默认值初始化交错数组

lmvvr0a8  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(100)

我尝试使用Linq创建一个10 × 10的锯齿状数组,我想用相同的字母(而不是字符)填充它(现在)。然而,我很难弄清楚如何在同一个Linq语句中填充它。
我现在有(类似于Initialize a Jagged Array the LINQ Way):

public static string[][] computerBoard = new string[10][]
    .Select(x => new string[10])
    .ToArray();

字符串
但是这创建了一个null字符串数组。如何修改它以将所有元素设置为与"A"相同的值?或者我应该使用一个双精度for循环来填充它?
我试着这样做:

public static string[][] computerBoard = new string[10][]
    .Select(x => new string[10]
    .Select(y => y = "/*my letter*/"))
    .ToArray();


但它给了我一个错误:
CS0226:无法将类型“System.Collections.Generic. Iclerable []”隐式转换为“string[][String]”。存在显式转换(是否缺少强制转换?)

qhhrdooz

qhhrdooz1#

我觉得这就是你想要的:

public static string[][] computerBoard = Enumerable.Range(1, 10)
    .Select(x => Enumerable.Repeat("/*my letter*/", 10).ToArray())
    .ToArray();

字符串

fcwjkofz

fcwjkofz2#

LINQ真的不是一个合适的工具,它被用来覆盖现有的集合。把它想象成一个更高级的foreach循环。
也就是说,通过使用Enumerable.Range,你可以得到你想要的。

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

字符串
这将给你一个给予10 × 10的数组,里面除了字母“a”什么都没有。
此外,我还要注意,LINQ不仅通常是错误的工具,而且它的可读性也不太好。

相关问题