您需要在输入权重中添加列表:
使用外部foreach
外部和内部for
循环:
var inputWeights = new List<List<int>>();
foreach (int wordid in wordids)
{
var currentRow = new List<int>();
for (int i = 0; i < hiddenids.Count; ++i)
currentRow.Add(GetStrength(wordid, hiddenids[i]));
inputWeights.Add(currentRow);
}
使用两个foreach
循环(这是我的首选解决方案,但意见可能不同!):
var inputWeights = new List<List<int>>();
foreach (int wordid in wordids)
{
var currentRow = new List<int>();
foreach (int hiddenid in hiddenids)
currentRow.Add(GetStrength(wordid, hiddenid));
inputWeights.Add(currentRow);
}
或者使用 Linq 而不是内部循环:
foreach (int wordid in wordids)
{
var currentRow = new List<int>();
currentRow.AddRange(hiddenids.Select(hiddenid => GetStrength(wordid, hiddenid)));
inputWeights.Add(currentRow);
}
甚至对整个事情都使用 Linq(现在变得难以理解;):
var inputWeights = wordids.Select(
wordid => new List<int>(hiddenids.Select(hiddenid => GetStrength(wordid, hiddenid)))
).ToList();
为了真正完整,这里有一个使用 Linq Query Syntax 的解决方案(是的,我花了太多时间在这个问题上,但一旦开始我就无法停止......;)
var inputWeights = (from wordid in wordids
select (from hiddenid in hiddenids
select GetStrength(wordid, hiddenid)).ToList()).ToList();
这一切都假设您确实想要 (#wordids * #hiddenids) 在结果中!这是真的吗?
例如,如果您有 10 个 wordid 和 5 个 hiddenid,则输出将总共有 50 个项目。