我正在学习用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);
}
虽然打印列表&#39; count显示我的Order列表现在有6个项目,每个SubList列表中有3个项目,我无法通过索引Order列表来调用子列表中的项目,因此我的条件列表,我想在其中使用我的项目,保持空白。是否有另一种方法来索引嵌套列表中的项目?我也尝试过:
Conditions[0]=Order[3][0];
Conditions[1]=Order[3][1];
Conditions[2]=Order[3][2];
哪个也没有用。如果有人知道如何做到这一点,我将非常感谢你的意见!
答案 0 :(得分:0)
你的代码应该工作的密钥真的是数字。我认为您清除了子列表并使用SubList.Clear();
丢失了数据。您的第一步是在执行此操作之前和之后设置断点并检查您的元素及其外观。
答案 1 :(得分:0)
将代码更改为
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);
}
答案 2 :(得分:0)
您可以使用以下linq查询来实现您的目标:
var result = tmp.Split(';')
.Select(b => b.Split(',')
.Select(float.Parse)
.ToArray())
.ToList();
foreach (float cond in result[3])
{
Console.WriteLine(cond);
}
答案 3 :(得分:0)
与其他人一样,这是你的SubList.Clear(),它会从你的订单列表中删除SubList中的所有元素。
您可以使用
Order.Add(new List<float>(SubList));
这使得没有来自SubList.clear()的引用和你刚刚添加到Order
的列表