如何填充嵌套列表
本文关键字:嵌套 列表 填充 何填充 | 更新日期: 2023-09-27 18:09:39
我有一个嵌套的列表,我需要他来填充从函数返回的值。就像一个二维矩阵,其中行数等于一个列表的长度,列数等于另一个列表的长度。问题是如何调用索引到嵌套列表的元素?
List<int> wordids;
List<int> hiddenids;
List<List<int>> inputWeights;
foreach (var wordid in wordids)
{
foreach (var hiddeid in hiddenids)
{
inputWeights[wordid][hiddenid] = GetStrength(wordid, hiddenid);
}
}
注:对不起,我的英语不好。
你需要添加列表到inputWeights:
使用外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查询语法的解决方案(是的,我花了太多时间在这上面,但我一开始就停不下来……;)
var inputWeights = (from wordid in wordids
select (from hiddenid in hiddenids
select GetStrength(wordid, hiddenid)).ToList()).ToList();
假设您确实希望在结果中显示(#wordids * #hiddenids) !这是真的吗?
例如,如果您有10个单词和5个隐藏项,那么输出将总共有50个项目。
使用二维数组或锯齿数组
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };
jaggedArray[1] = new int[] { 0, 2, 4, 6 };
jaggedArray[2] = new int[] { 11, 22 };
a=jaggedArray[0][1]; //a=3;
在您的特殊情况下,您不应该使用foreach
,而应该使用通常的for
循环,如
List<int> wordids;
List<int> hiddenids;
List<List<int>> inputWeights;
wordids = new List<int>();
hiddenids = new List<int>();
inputWeights = new List<List<int>>();
//add values to your List-objects
foreach (int i = 0; i < wordids.Length; i++)
{
foreach (int j = 0; j < hiddenids.Length; j++)
{
inputWeights[i][j] = GetStrength(wordids[i], hiddenids[j]);
}
}
List<List<int>> inputWeights=new List<List<int>>();
for (var i = 1; wordids.Count > i; ++i)
{
for (var h = 1; hiddenids.Count > h; ++h)
{
inputWeights[i-1][h-1] = GetStrength(wordids[i-1], hiddenids[h-1]);
}
}