C# 如何比较字典键值和元组键值
我有一个元组C# 如何比较字典键值和元组键值,c#,asp.net,if-statement,C#,Asp.net,If Statement,我有一个元组x的列表,其中我得到的键和值是(45345,1),(54645,0),(45345,0) 我有一个DictionaryPathList,因为我得到的键和值是(45345,asdfsd234egsgdfgs56345),(54645,0dfsd234egsgdfgs563456),(45345,0dfsd234egsgdfgs56345234) 我正在努力 foreach (var item in PathList) { if (x.Equals(item
x的列表,其中我得到的键和值是(45345,1),(54645,0),(45345,0)
我有一个DictionaryPathList
,因为我得到的键和值是(45345,asdfsd234egsgdfgs56345),(54645,0dfsd234egsgdfgs563456),(45345,0dfsd234egsgdfgs56345234)
我正在努力
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的路径列表相同,并且值的X必须具有值0,然后在条件内输入。。。我现在所做的是,在任何情况下,我都无法进入If语句
如何检查我的状况
让我进一步解释一下:这是我返回一个元组列表,其中我得到了(54356,0),(64643,0),(34365,1)在我的ascx页面中,我有一个元组列表
x,在这个x中,我得到了列表的所有返回值,现在在同一个ascx页面中,我有字典PathList
,我正在添加值ImgPathList.Add(54356456DFHGDFG6575DFGHDF);所以我得到了两个不同的列表,一个是x,另一个是路径列表
现在我想检查一下。如果pathlist具有id,而54356和x具有54356和0,则在if语句中输入,否则显示标签msg as file不能被删除将断点放在条件上,循环直到得到应输入if语句的值,然后使用“Watch”查看表达式的哪个部分返回false调试窗口。也许这是有用的: 在我的项目中,我有一本字典:
public Dictionary<int, double> CpuDictionary = new Dictionary<int, double>();
ContainesKey函数对我来说非常适合。也许你应该尝试一下类似的方法。我试图理解这个问题,但听起来我们有,比如:
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"
}
}
但是,我不能充分理解您给出的示例,因此我不能确定。如果您想检查是否存在一个元组,该元组的字典键为
Item1
和Item2==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);
}
}
foreach(路径列表中的变量项)
{
Tuple temp=新的Tuple(item.Key,0);
//如果(x.Equals(item.Key)&&x[item.Key].Equals(0))
如果(x.包含(温度))
{
字符串path1=Path.Combine(GetDirectory(item.Value)、item.Value);
删除(路径1);
}
}
我不知道这是不是一个好方法,但它解决了我的问题…你能更清楚地说:什么是
x
?您对x.Equals(item.Key)
和x[item.Key]
的使用很奇怪。也;如果你在字典上循环,这通常意味着有些不对劲……你的示例代码中的x是什么?如果你的x
是Tuple
的列表,那么你不能将x
与item.Key
进行比较,因为item.Key
是int
。我说的是(x.Equals(item.Key)
)yax是一个元组列表,那么在这种情况下我应该做什么呢?我猜if语句的第一个条件必须是:x.Item1.Equals(item.Key)
x.Equals(item.Key)返回false,x[item.Key].Equals(0)给出异常x[item.Key].Equals(0)]x[item.Key]'引发了'System.ArgumentOutOfRangeException'类型的异常'bool@Rocky再说一遍:什么是x
?x是一个元组列表,其中id为34234、65645、67567,每个id的SP返回值为0和1,因此它包含(34234,0)、(65645,1)我认为这里的问题是,您试图通过元组的键访问元组列表中的成员。这是不可能的。当您写入x[item.key]时,它返回x的元素号item.key-它不存在。相反,您可以使用LINQ,例如x.Where(i=>i.Item1==item.key)来查找相应的元组。此外,x.Equals(item.key)将始终返回false,因为x是一个列表,而item.key是一个单独的项。在字典上循环,然后在列表上使用find
查找每个键是一种非常低效的方法;即O(N*M)
。对比列表上的循环(O(N)
)和使用字典进行查找(O(1)
)-这就是O(N)
。这是正确的。但是,从这个问题上看,OP到底想做什么还不清楚,所以我无法预测如何改进他的方法。因此,我把问题的标题作为要求。是的,这里的上下文令人痛苦地困惑——同意。
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);
}
}