как сравнить значение ключа словаря и значение ключа кортежа - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть список кортежей <Tuple<int, int>> x, в котором я получаю ключ и значение как (45345, 1), (54645,0), (45345,0), и у меня есть Dictionary < int, string > PathList, в котором яполучить ключ и значение как (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);
       } 
    }

Я хочу проверить, если я хочу проверитьтак как PathList для id и x of value должны иметь значение 0, то войти в условие ... что я делаю сейчас, так это то, что ни при каких условиях я не могу войти в оператор If.

Как проверить мойусловие?

Позвольте мне объяснить больше: проверить это qus это то, что я возвращаю список кортежа, в котором я получаю (54356, 0), (64643, 0), (34365, 1) в моей странице ascx у меня есть список кортежа <Tuple<int, int>> x, в этом xi я получаю все возвращаемое значение списка, теперь на той же странице ascx у меня есть Dictionary < int, string > PathList в том, что я добавляю значение ImgPathList.Add(54356, 456dfhgdfg6575dfghdf);поэтому я получил 2 разных списка, один из которых x, а другой - Pathlist.

Теперь я хочу проверить.если pathlist имеет id и 54356, а x имеет 54356 и 0, то введите внутри оператора if, иначе покажите сообщение в виде сообщения, поскольку файл не может быть удален

Ответы [ 5 ]

2 голосов
/ 27 февраля 2012

Я пытаюсь понять вопрос, но звучит так, как будто у нас, скажем:

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"
    }
}

Однако я не могу достаточно понять пример, который вы приводите, поэтому не могу сказать наверняка.

0 голосов
/ 27 февраля 2012

Я изменил свой код как

 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);
       }
   }

Я не знаю, хорошо это или нет, но это решило мою проблему ...

0 голосов
/ 27 февраля 2012

Вот и все, если вы хотите проверить, есть ли кортеж с ключом словаря как 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
    }
}

Примечание: в приведенном выше примере у вас есть два идентичных словарных ключа.

0 голосов
/ 27 февраля 2012

Может быть, это полезно: в моем проекте у меня есть словарь:

    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;
            }

Функция Содержит ключ работаетидеально для меня.Может быть, вы должны попробовать что-то подобное.

0 голосов
/ 27 февраля 2012

Поместите точку останова в условие, выполните цикл, пока не получите значение, которое должно было войти в оператор if, а затем посмотрите, какая часть выражения возвращает false, используя окно отладки «Watch».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...