gpt4 book ai didi

具有固定数组大小的 C# ToArray()

转载 作者:行者123 更新时间:2023-11-30 23:09:17 25 4
gpt4 key购买 nike

我在 C# 中有一个二维矩阵,它的构建有点复杂。这是矩阵生成的代码:

    string[][] learningInputNotCodified = learningDataRaw.Select(ldr => new string[] {
ldr.ChangeType.ToString(),
ldr.MutationOperator.Name??"null",
ldr.MutationOperator.Before??"null",
ldr.MutationOperator.After??"null",
ldr.SLOC.ToString(),
dBContext.TestCases
.Count(tc => tc.UserMutantPlay.MutantId == ldr.Id).ToString(),
dBContext.TestCases
.Where(tc => tc.UserMutantPlay.MutantId == ldr.Id)
.Select(rtc => new {
killCount = dBContext.TestCases
.Where(tc => tc.IsMutantKilled
&& tc.UserMutantPlay.MutantId == ldr.Id
&& !tc.InputValues.Any(iv =>
rtc.InputValues.FirstOrDefault(iv1 => iv1.InputParameterId == iv.InputParameterId).ValueAsString != iv.ValueAsString))
.Count()
}).Sum(tc => tc.killCount).ToString(),
ldr.OriginalCode.Mutants.Count().ToString(),
ldr.ASTDiff??"null"
}.Concat(
ldr.ParseSubTrees.OrderBy(pst => pst.Height).Select(pst => pst.SerializedTree).ToArray()
).ToArray()).ToArray();

不要担心上面的代码。问题是我希望矩阵是正方形的。硬编码的列是可以的,但是那些来自 DB ldr.ParseSubTrees.OrderBy(pst => pst.Height).Select(pst => pst.SerializedTree).ToArray() 的列问题。在到达这个语句(大语句)之前,我已经查询了数据库的最大大小。所以我知道尺寸,只想要这样的东西:

ldr.ParseSubTrees.OrderBy(pst => pst.Height).Select(pst => pst.SerializedTree).ToArray(maxParseTreeDepth)

虽然这是我需要的示例而不是解决方案,但我需要以这样的形式定义数组大小。

在您提出解决方案之前,我必须注意 Array.Resize 没有帮助。因为它需要将对象保存为 ref 并且在选择表达式中我不能这样做。

最佳答案

一个快速而肮脏的解决方案是连接一个数组,而不是使用 Take():

查询前:

var paddingArray = new string[maxParseTreeDepth];

内部查询:

ldr.ParseSubTrees
.OrderBy(pst => pst.Height)
.Select(pst => pst.SerializedTree)
.Concat(paddingArray)
.Take(maxParseTreeDepth)
.ToArray();

关于具有固定数组大小的 C# ToArray(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45895791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com