6

我有这样的事情:

Dictionary<int, List<string>> fileList = new Dictionary<int, List<string>>();

然后,我用一些变量填充它,例如:

fileList.Add(
    counter, 
    new List<string> { 
        OFD.SafeFileName, 
        OFD.FileName, 
        VERSION, NAME      , DATE  , 
        BOX    , SERIAL_NUM, SERIES,  
        POINT  , NOTE      , VARIANT
    }
);

哪里counter是每次发生某事时递增+1的变量,List<string>{XXX}哪里XXX是保存一些文本的字符串变量。

我的问题是,如果 counter == 1,我如何从列表中访问这些字符串?

4

5 回答 5

15

您可以像往常一样访问字典和列表中的数据。请记住,首先访问字典中的值,这将返回一个列表。然后,访问列表中的项目。

例如,您可以对返回列表的字典进行索引,然后对列表进行索引:

         ------ Returns a list from the dictionary
         |  --- Returns an item from the list
         |  |
         v  v
fileList[0][0] // First item in the first list
fileList[1][0] // First item in the second list
fileList[1][1] // Second item in the second list
// etc.
于 2013-06-14T12:24:54.353 回答
3

FishBasketGordo 解释了如何访问数据结构中的条目。我只会在这里添加一些想法:

字典(基于哈希表)允许快速访问任意键。但是你的键是由一个计数器变量(counter = 0, 1, 2, 3, 4 ...)给出的。访问此类键的最快方法是简单地使用数组或列表的索引。因此,我只会使用 aList<>而不是 a Dictionary<,>

此外,您的列表似乎没有列出匿名值,而是列出了具有非常具体和不同含义的值。即日期与名称不同。在这种情况下,我将创建一个存储这些值并允许单独访问各个值的类。

public class FileInformation 
{
    public string SafeFileName { get; set; }
    public string FileName { get; set; }
    public decimal Version { get; set; }
    public string Name { get; set; }
    public DateTime Date { get; set; }
    ...
}

现在你可以创建一个这样的列表:

var fileList = new List<FileInformation>();
fileList.Add(
    new FileInformation {
        SafeFileName = "MyDocument.txt",
        FileName = "MyDocument.txt",
        Version = 1.2,
        ...
    }
}

你可以访问这样的信息

decimal version = fileList[5].Version;

如果键不从零开始,只需减去起始值:

int firstKey = 100;
int requestedKey = 117;
decimal version = fileList[requestedKey - firstKey].Version;
于 2013-06-14T13:28:52.967 回答
2

Dictionary 使用索引器通过键访问其值。

List<string> items = fileList[counter];
var str0 = items[0];
var str1 = items[1];

然后你可以对列表做任何事情。

于 2013-06-14T12:25:00.470 回答
0
Dictionary<int, List<string>> fileList = new Dictionary<int, List<string>>();
fileList.Add(101, new List<string> { "fijo", "Frigy" });
fileList.Add(102, new List<string> { "lijo", "liji" });
fileList.Add(103, new List<string> { "vimal", "vilma" });

for (int Key = 101; Key < 104; Key++)
{
    for (int ListIndex = 0; ListIndex < fileList[Key].Count; ListIndex++)
    {
       Console.WriteLine(fileList[Key][ListIndex] as string);
    }
}
于 2014-11-20T08:28:35.277 回答
0

您可以通过 访问列表MyDic[Key][0]。编辑列表时,不会出现任何运行时错误,但会导致字典中存储不必要的值。所以更好:

  1. 分配MyDict[Key]给新列表
  2. 编辑新列表,然后
  3. 将新列表重新分配给MyDict[Key]而不是编辑字典中的特定变量,并将列表作为值。

代码示例:

List<string> lstr = new List<string(MyDict[Key]); 

lstr[0] = "new Values";
lstr[1] = "new Value 2";

MyDict[Key] = lstr; 
于 2015-10-22T08:19:53.360 回答