如何比较Dictionary键值和Tuple键值

本文关键字:键值 Dictionary Tuple 比较 何比较 | 更新日期: 2023-09-27 18:25:58

我有一个元组列表<Tuple<int, int>> x,因为我得到的键和值为(45345,1)、(54645,0)、(45345,0我有一个Dictionary < int, string > PathList,因为我得到的密钥和值为(45345,asdfsd234egsgdfgs56345),(54645,0dfsd234egsgdfgs 563456),(45345,0dfsd234Egsgdfgs5645234)

我正在尝试

    foreach (var item in PathList)
    {
       if (x.Equals(item.Key) && x[item.Key].Equals(0))
       {
         string path1 = Path.Combine(GetDirectory(item.Value), item.Value);
         File.Delete(path1);
       } 
    }

我想检查id的X是否与id的PathList相同,并且值的X必须具有值0,然后在条件中输入。。。我现在所做的是,在任何情况下,我都无法进入If语句。

如何检查我的状况?

让我解释一下:检查这个qus是不是我正在返回一个元组列表,我在我的ascx页面中得到了(54356,0)、(64643,0)和(34365,1)。我有元组列表<Tuple<int, int>> x,在这个x中我得到了列表的所有返回值,现在在同一个ascx页面上我有Dictionary < int, string > PathList,我正在添加值ImgPathList.Add(54356456dfhgdfg6575dfghdf);所以我得到了两个不同的列表,一个是x,另一个是Pathlist。

现在我想检查一下。如果路径列表具有id和54356,x具有54356和0,则在if语句中输入else显示标记msg as file cannot be delete

如何比较Dictionary键值和Tuple键值

我试图理解这个问题,但听起来我们已经理解了,比如:

var x = Tuple.Create(45345,0);

在这种情况下,您只需要:

string value;
if(PathList.TryGetValue(x.Item1, out value)) {
    // there is an item in the dictionary with key 45345;
    // the value is now in "value"
}

还有一些关于零检查的内容;不确定你的意思,但也许只需查看x.Item2

如果x实际上是一个列表,那么在一个循环中执行:

foreach(var item in list) {
    string value;
    if(PathList.TryGetValue(item.Item1, out value)) {
        // there is an element in the dictionary with key matching item;
        // the value is now in "value"
    }
}

可能这也是零检查的来源:

foreach(var item in list) {
    string value;
    if(item.Item2 == 0 && PathList.TryGetValue(item.Item1, out value)) {
        // there is an element in the dictionary with key matching item;
        // the value is now in "value"
    }
}

然而,我不能充分理解你举的例子,所以我不能肯定。

将断点放在条件上,循环直到得到应该输入if语句的值,然后使用"监视"调试窗口查看表达式的哪一部分返回false。

也许这很有用:在我的项目中,我有一本字典:

    public Dictionary<int, double> CpuDictionary = new Dictionary<int, double>();

在某个时刻,我试图使用找到一个密钥

            int roundedcpupercentage = Convert.ToInt16(Math.Round(cpuusagepercentage));
            if (CpuDictionary.ContainsKey(roundedcpupercentage))
            {
                temp.CPU = CpuDictionary[roundedcpupercentage];
                temp.Watt = temp.CPU;
            }

containskey函数非常适合我。也许你应该尝试类似的功能。

如果您想检查是否有一个元组的字典键为Item1Item2==0:

foreach(var item in pathList) { 
    var xItem = x.Find(i => i.Item1 == item.Key && i.Item2 == 0);
    if(xItem =! null) { 
        // YourTuple.Item1==item.Key && YourTuple.Item2==0 => true
    }
}

注意:在上面的例子中,您有两个相同的字典键。

我已将代码修改为

 foreach (var item in PathList)
 {
    Tuple<int, int> temp = new Tuple<int, int>(item.Key, 0);
       //if (x.Equals(item.Key) && x[item.Key].Equals(0))
    if (x.Contains<Tuple<int, int>>(temp))
      {
         string path1 = Path.Combine(GetDirectory(item.Value), item.Value);
         File.Delete(path1);
       }
   }

我不知道这是不是一个好方法,但它解决了我的问题。。。