我正在寻找解决我在尝试循环记录集时遇到的问题的解决方案,抓取我需要的列,将值添加到列表中,然后将列表添加到字典值。
这适用于第一条记录,但在我尝试清除列表以将下面的8个字段插入列表后,它将清除字典中的现有列表值(在已经添加之后)。
有没有办法解决这个问题?
In [570]: np.savetxt('x.txt',x,fmt='%d %d %s;')
In [571]: cat x.txt # shell command to display the file
1 3 test1;
2 2 test2;
3 2 test3;
答案 0 :(得分:0)
每个循环创建一个新列表。这解决了你的问题。因为它是一个调用clear的引用类型将导致该引用清除 - 包括字典中的引用。
答案 1 :(得分:0)
尝试dbList = new List<string>();
而不是dbList.Clear()
解决方案:
List<string> dbList;
Dictionary<int, List<string>> dbDict = new Dictionary<int, List<string>>();
do
{
dbList = new List<string>();
dbList.Add("Field1 : " (String)rs.Fields["Field1"].Value);
dbList.Add("Field2 : " rs.Fields["Field 2"].Value);
dbList.Add("Field3 : " (String)rs.Fields["Field3"].Value);
dbDict.add(i,dbList);
i+=1;
rs.MoveNext();
}
while (rs.EOF == false);
答案 2 :(得分:0)
这是因为dbList是一个引用类型,你传递对字典的引用,然后在清除List的内部状态的同一引用上调用clear。
将dbList
的创建和使用移到循环内部,然后在每次循环迭代时创建一个新实例,并且不要调用Clear。
Dictionary<int, List<string>> dbDict = new Dictionary<int, List<string>>();
do
{
List<string> dbList = new List<string>();
dbList.Add("Field1 : " (String)rs.Fields["Field1"].Value);
dbList.Add("Field2 : " rs.Fields["Field 2"].Value);
dbList.Add("Field3 : " (String)rs.Fields["Field3"].Value);
dbDict.add(i,dbList);
i+=1;
rs.MoveNext();
}
while (rs.EOF == false);