Dictionary 有一个ContainsKey方法,该方法的作用就是检查键值对中是否存在该键。今天在使用时,遇到了点小麻烦:Dictionary <List<int>,int> mydic=new Dictionary<List<int>,int>();
List<int> data = new List<int>(); data.Add(1);
data.Add(2);
data.Add(3); mydic.Add(data,0); //然后新建一个Lis<int> 用ContainsKey 检查 用了两种方法:
//方法一:
List<int> newData=new List<int>();
data.Foreach(x=>newData.Add(x)); if(mydic.ContainsKey(newData))
{
Console.Write("存在");
}
//方法二:
List<int> newData=new List<int>();
newData=data; if(mydic.ContainsKey(newData))
{
Console.Write("存在");
}
结论: 只有第二中方法 打印出了存在。
问题:
(1)ContainsKey 查找的本质是什么?
(2)第一种方法与第二种方法的区别在哪里?
(3) 第一种方法如何改进?
List<int> data = new List<int>(); data.Add(1);
data.Add(2);
data.Add(3); mydic.Add(data,0); //然后新建一个Lis<int> 用ContainsKey 检查 用了两种方法:
//方法一:
List<int> newData=new List<int>();
data.Foreach(x=>newData.Add(x)); if(mydic.ContainsKey(newData))
{
Console.Write("存在");
}
//方法二:
List<int> newData=new List<int>();
newData=data; if(mydic.ContainsKey(newData))
{
Console.Write("存在");
}
结论: 只有第二中方法 打印出了存在。
问题:
(1)ContainsKey 查找的本质是什么?
(2)第一种方法与第二种方法的区别在哪里?
(3) 第一种方法如何改进?
而你这里key是List<int>,这个判断相等的依据是两个List的引用是否一样,而不是List里面的元素都相等
事实上用List<int>做key毫无意义也达不到预想的效果
哦哦,我大概明白你的意思了。
你看这种方式:
Dictionary <int,int> mydic =new Dictionary<int,int>();mydic.Add(1,5); int value=1;
if(mydic.ContainsKey(value))
{
Console.Write("存在,值为:{0}",mydic[value]);
}
else
{
Console.Write("不存在");} 对上述例子自己的想法:
(1) 对于外界输入的任意值value , 通过ContainsKey即可判断出,该值存不存在于mydic 中,存在的话,就可获得相对应的值。
(2) 上面这个例子,仅仅体现出了通过一个值找到另一个值,,有没有就想我最上面的那个帖子一样,通过两个值,或者多个值,获得相对应的值呢,,,所以自己斗胆试了试Dictionary<List<int>,int> ,然后发现这种方式 好像并不理想
然后实现Equals方法,在里面判断两个List的子元素是否完全相等
这个类就可以做为key来判断了
通过 key 判断是否存在,如果存在你可以给你的 LIST 加数据。 (2)第一种方法与第二种方法的区别在哪里?一个是查找,一个是赋值
(3) 第一种方法如何改进?Dictionary <int,int> mydic =new Dictionary<int,int>();
mydic.Add(1,5);
int value=1;
if(mydic.ContainsKey(value))
{
//如果存在可以
mydic[value]).Add(你的值);
}
else
{
//不存在
mydic[value]) = new List<int>(){ 你的值 };
}
if (mydic.ContainsKey(value))
{
//如果存在可以
mydic[value].Add(你的值);
}
else
{
//不存在
mydic[value] = new System.Collections.Generic.List<int>() { 你的值 }; }
ss = "123"
Dim a As New Dictionary(Of String, String)
a.Item(ss) = "" Dim sss As String
sss = "123"
msgbox(a.ContainsKey(sss))
哪字符串也是引用类型,为什么这个就返回 true呢
结果是第一种不会变,第二种会跟着变化。
比较2个引用类型是否相等不是比较内容一致,而是比较引用地址呀。所以第一种newdata!=data,所以找不到
TKey是数组,当然是引用类型,比较的是地址,而不是里面的值