为了账号安全,请及时绑定邮箱和手机立即绑定

遍历字典键/值对,其中值是一个数组

遍历字典键/值对,其中值是一个数组

C#
catspeake 2022-11-13 13:39:47
我正在尝试从值为数组的字典中显示键/值对的元素。它是一个用户名字典,其中键是表示用户名称的字符串,值是用户属性。我希望将每个键/值对列在一起,因此输出将如下所示:User1(密钥)User1_emailuser1_fullNameUser1_displayNameUser2(密钥)User2_emailuser2_fullNameUser2_displayName等...但是,我得到的结果是它显示了正确的键,但只显示了值的最后一个元素。例如,这是我得到的输出:User1(键)User2_emailuser2_fullNameUser2_displayNameUser2(密钥)User2_emailuser2_fullNameUser2_displayName等...这是我的 foreach 循环:foreach (KeyValuePair<string, string[]> entry in userNames){    txtOutput.Text += entry.Key;    foreach (string value in entry.Value)    {        txtOutput.Text += value + Environment.NewLine;    }}嵌套的 foreach 循环似乎遍历所有值而不管键,但我只希望它遍历与父 foreach 循环中的 CURRENT 键关联的值。希望我的问题是有道理的,任何帮助表示赞赏
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

您在评论中提供了以下代码以填充您的字典:


string[] tempArray = new string[5];


for (int i = 0; i < rows; i++)

{

    for (int j = 0; j < 6; j++)

    {

        if (j != 0) tempArray[j-1] = userInfo[i, j];

    }

    userNames.Add(userInfo[i, 0], tempArray);

}

看起来您希望通过在 for 循环之外使用单个数组来减少内存使用量。但是,这会对您的字典产生意想不到的副作用!


字典将通过引用存储数组。在填充循环的第一次迭代中,您调用usernames.Add(..., tempArray)which 将tempArray实例分配给第一个用户键。然后第二次迭代重新使用相同的数组并将其分配给下一个用户密钥。由于您没有为每个用户初始化一个新的数组实例,因此您实际上是将所有键与同一个数组相关联。循环的最后一次迭代将决定这个数组的状态。


这应该解决它:


for (int i = 0; i < rows; i++)

{

    string[] tempArray = new string[5];

    for (int j = 0; j < 6; j++)

    {

        if (j != 0) tempArray[j-1] = userInfo[i, j];

    }

    userNames.Add(userInfo[i, 0], tempArray);

}


查看完整回答
反对 回复 2022-11-13
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信