c#调用嵌套列表中的项目
c# call items in nested list
我正在学习用 C# 编程,但我 运行 遇到了一个问题:我似乎无法调用我之前存储在嵌套列表中的元素,如下所示:
private List<List<float>> Order = new List<List<float>>();
private List<float> SubList = new List<float>();
private List<float> Conditions = new List<float>();
string tmp;
string[] levels;
string[] sublevels;
float curlevel;
tmp = "1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1"
levels = tmp.Split(';');
for(int i=0;i<levels.Length;i++){
sublevels=levels[i].Split(',');
for(int a=0;a<sublevels.Length;a++){
float.TryParse(sublevels[a], out curlevel);
SubList.Add(curlevel);
}
Order.Add(SubList);
SubList.Clear();
}
foreach(float cond in Order[3]){
Conditions.Add(cond);
}
虽然打印列表的计数显示我的订单列表现在有 6 个项目,每个子列表列表有 3 个项目,但我无法通过索引订单列表来调用子列表中的项目,因此我想在我的项目中使用的条件列表仍然是空的。是否有另一种方法来索引嵌套列表中的项目?我也试过:
Conditions[0]=Order[3][0];
Conditions[1]=Order[3][1];
Conditions[2]=Order[3][2];
这也没有用。如果有人知道如何执行此操作,我将非常感谢您的意见!
您的代码应该可以正常工作,因为键确实是数字的。我认为您使用 SubList.Clear();
清除了您的子列表并丢失了数据您的第一步是在执行此操作之前和之后放置一个断点并检查您的元素及其外观。
将您的代码更改为
List<List<float>> Order = new List<List<float>>();
//List<float> SubList = new List<float>();
List<float> Conditions = new List<float>();
string tmp;
string[] levels;
string[] sublevels;
float curlevel;
tmp = "1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1";
levels = tmp.Split(';');
for (int i = 0; i < levels.Length; i++)
{
List<float> SubList = new List<float>();
sublevels = levels[i].Split(',');
for (int a = 0; a < sublevels.Length; a++)
{
float.TryParse(sublevels[a], out curlevel);
SubList.Add(curlevel);
}
Order.Add(SubList);
//SubList.Clear();
}
foreach (float cond in Order[3])
{
Conditions.Add(cond);
}
您可以使用以下 linq 查询来实现您想要的:
var result = tmp.Split(';')
.Select(b => b.Split(',')
.Select(float.Parse)
.ToArray())
.ToList();
foreach (float cond in result[3])
{
Console.WriteLine(cond);
}
就像其他人写的那样,是您的 SubList.Clear() 删除了订单列表中子列表中的所有元素。
您可以使用
Order.Add(new List<float>(SubList));
这确保没有来自 SubList.clear() 的引用和您刚刚添加到 Order
的列表
我正在学习用 C# 编程,但我 运行 遇到了一个问题:我似乎无法调用我之前存储在嵌套列表中的元素,如下所示:
private List<List<float>> Order = new List<List<float>>();
private List<float> SubList = new List<float>();
private List<float> Conditions = new List<float>();
string tmp;
string[] levels;
string[] sublevels;
float curlevel;
tmp = "1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1"
levels = tmp.Split(';');
for(int i=0;i<levels.Length;i++){
sublevels=levels[i].Split(',');
for(int a=0;a<sublevels.Length;a++){
float.TryParse(sublevels[a], out curlevel);
SubList.Add(curlevel);
}
Order.Add(SubList);
SubList.Clear();
}
foreach(float cond in Order[3]){
Conditions.Add(cond);
}
虽然打印列表的计数显示我的订单列表现在有 6 个项目,每个子列表列表有 3 个项目,但我无法通过索引订单列表来调用子列表中的项目,因此我想在我的项目中使用的条件列表仍然是空的。是否有另一种方法来索引嵌套列表中的项目?我也试过:
Conditions[0]=Order[3][0];
Conditions[1]=Order[3][1];
Conditions[2]=Order[3][2];
这也没有用。如果有人知道如何执行此操作,我将非常感谢您的意见!
您的代码应该可以正常工作,因为键确实是数字的。我认为您使用 SubList.Clear();
清除了您的子列表并丢失了数据您的第一步是在执行此操作之前和之后放置一个断点并检查您的元素及其外观。
将您的代码更改为
List<List<float>> Order = new List<List<float>>();
//List<float> SubList = new List<float>();
List<float> Conditions = new List<float>();
string tmp;
string[] levels;
string[] sublevels;
float curlevel;
tmp = "1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1";
levels = tmp.Split(';');
for (int i = 0; i < levels.Length; i++)
{
List<float> SubList = new List<float>();
sublevels = levels[i].Split(',');
for (int a = 0; a < sublevels.Length; a++)
{
float.TryParse(sublevels[a], out curlevel);
SubList.Add(curlevel);
}
Order.Add(SubList);
//SubList.Clear();
}
foreach (float cond in Order[3])
{
Conditions.Add(cond);
}
您可以使用以下 linq 查询来实现您想要的:
var result = tmp.Split(';')
.Select(b => b.Split(',')
.Select(float.Parse)
.ToArray())
.ToList();
foreach (float cond in result[3])
{
Console.WriteLine(cond);
}
就像其他人写的那样,是您的 SubList.Clear() 删除了订单列表中子列表中的所有元素。
您可以使用
Order.Add(new List<float>(SubList));
这确保没有来自 SubList.clear() 的引用和您刚刚添加到 Order
的列表