и для каждого ключа каждое значение в списке целых чисел одинаково (оба не обязательно в одном и том же порядке). >
Я использую оба ответа из этого и этого связанного вопроса, но оба они не прошли мой набор тестов для тестовых функций DoesOrderKeysMatter и DoesOrderValuesMatter.
Мой набор тестов:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
using System.Linq;
namespace UnitTestProject1
{
[TestClass]
public class ProvideReportTests
{
[TestMethod]
public void AreSameDictionariesEqual()
{
// arrange
Dictionary dict1 = GetDict1();
// act
bool dictsAreEqual = false;
dictsAreEqual = AreDictionariesEqual(dict1, dict1);
// assert
Assert.IsTrue(dictsAreEqual, "Dictionaries are not equal");
}
[TestMethod]
public void AreDifferentDictionariesNotEqual()
{
// arrange
Dictionary dict1 = GetDict1();
Dictionary dict2 = new Dictionary();
// act
bool dictsAreEqual = true;
dictsAreEqual = AreDictionariesEqual(dict1, dict2);
// assert
Assert.IsFalse(dictsAreEqual, "Dictionaries are equal");
}
[TestMethod]
public void DoesOrderKeysMatter()
{
// arrange
Dictionary dict1 = GetDict1();
Dictionary dict2 = GetDict2();
// act
bool dictsAreEqual = false;
dictsAreEqual = AreDictionariesEqual(dict1, dict2);
// assert
Assert.IsTrue(dictsAreEqual, "Dictionaries are not equal");
}
[TestMethod]
public void DoesOrderValuesMatter()
{
// arrange
Dictionary dict1 = GetDict1();
Dictionary dict2 = new Dictionary();
dict2.Add("a", GetList(2,1));
dict2.Add("b", GetList(3,4));
// act
bool dictsAreEqual = false;
dictsAreEqual = AreDictionariesEqual(dict1, dict2);
// assert
Assert.IsTrue(dictsAreEqual, "Dictionaries are not equal");
}
private bool AreDictionariesEqual(Dictionary dict1, Dictionary dict2)
{
return dict1.Keys.Count == dict2.Keys.Count &&
dict1.Keys.All(k => dict2.ContainsKey(k) &&
object.Equals(dict2[k], dict1[k]));
// also fails:
// return dict1.OrderBy(kvp => kvp.Key).SequenceEqual(dict2.OrderBy(kvp => kvp.Key));
}
}
}
Как правильно сравнивать словари такого типа? Или в моем (правда, неуклюже написанном) TestSuite есть ошибка? Обновление
Я пытаюсь включить Ответ Серви в моем наборе тестов, как показано ниже, но я получаю некоторые ошибки (подчеркнуты красной волнистой линией в Visual Studio):
С помощью C# я хочу сравнить два словаря с [list] [*]ключами в виде строки и [*]значения как список целых чисел. [/list] Я предполагаю, что два словаря равны, если [list][*]они оба имеют одинаковые ключи [*]и для каждого ключа каждое значение в списке целых чисел одинаково (оба не обязательно в одном и том же порядке). > [/list] Я использую оба ответа из этого и этого связанного вопроса, но оба они не прошли мой набор тестов для тестовых функций DoesOrderKeysMatter и DoesOrderValuesMatter. Мой набор тестов: [code]public static List GetList(int x, int y) { List list = new List(); list.Add(x); list.Add(y); return list; }
public static Dictionary GetDict1() { Dictionary dict1 = new Dictionary(); dict1.Add("a", GetList(1,2)); dict1.Add("b", GetList(3,4)); return dict1; }
public static Dictionary GetDict2() { Dictionary dict2 = new Dictionary(); dict2.Add("b", GetList(3,4)); dict2.Add("a", GetList(1,2)); return dict2; }
[/code] Тестовый класс [code]using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using System.Linq;
namespace UnitTestProject1 { [TestClass] public class ProvideReportTests { [TestMethod] public void AreSameDictionariesEqual() { // arrange Dictionary dict1 = GetDict1(); // act bool dictsAreEqual = false; dictsAreEqual = AreDictionariesEqual(dict1, dict1); // assert Assert.IsTrue(dictsAreEqual, "Dictionaries are not equal"); }
// also fails: // return dict1.OrderBy(kvp => kvp.Key).SequenceEqual(dict2.OrderBy(kvp => kvp.Key)); } } } [/code] Как правильно сравнивать словари такого типа? Или в моем (правда, неуклюже написанном) TestSuite есть ошибка? [b]Обновление[/b] Я пытаюсь включить Ответ Серви в моем наборе тестов, как показано ниже, но я получаю некоторые ошибки (подчеркнуты красной волнистой линией в Visual Studio): [list] [*][code]SetEquals[/code] в методе `Equals говорит: "не содержит определения для SetEquals, принимающего первый аргумент типа Generic.List.
[*] В словарях равны[code]it says[/code]DictionaryComparer — это тип, но он используется как переменная.` [code]namespace UnitTestProject1 { [TestClass] public class ProvideReportTests { [TestMethod] // ... same as above
private bool AreDictionariesEqual(Dictionary dict1, Dictionary dict2) { DictionaryComparer(new ListComparer() dc = new DictionaryComparer(new ListComparer(); return dc.Equals(dict1, dict2);
}
}
public class DictionaryComparer : IEqualityComparer { private IEqualityComparer valueComparer; public DictionaryComparer(IEqualityComparer valueComparer = null) { this.valueComparer = valueComparer ?? EqualityComparer.Default; } public bool Equals(Dictionary x, Dictionary y) { if (x.Count != y.Count) return false; if (x.Keys.Except(y.Keys).Any()) return false; if (y.Keys.Except(x.Keys).Any()) return false; foreach (var pair in x) if (!valueComparer.Equals(pair.Value, y[pair.Key])) return false; return true; }
public int GetHashCode(Dictionary obj) { throw new NotImplementedException(); } }
public class ListComparer : IEqualityComparer { private IEqualityComparer valueComparer; public ListComparer(IEqualityComparer valueComparer = null) { this.valueComparer = valueComparer ?? EqualityComparer.Default; }
public bool Equals(List x, List y) { return x.SetEquals(y, valueComparer); }
public int GetHashCode(List obj) { throw new NotImplementedException(); } }
public static bool SetEquals(this IEnumerable first, IEnumerable second, IEqualityComparer comparer) { return new HashSet(second, comparer ?? EqualityComparer.Default) .SetEquals(first); }
У меня есть класс MyClass, который содержит две переменные-члена foo и bar:
класс MyClass: def __init__(self, foo, bar): self.foo = фу self.bar = бар У меня есть два экземпляра этого класса, каждый из которых имеет одинаковые значения для foo и...
У меня есть два словаря списка словаря, и я хочу сравнить значение словаря первого списка со вторым списком словаря
Например:
Dictionary A contains
Dictionary B contains
Как взять 1 -й словарь {name: c} и проверить, существует ли он в словаре...
Я пытаюсь установить равенство трех равных переменных, но следующий код не печатает очевидный правильный ответ, который он должен распечатать. Может ли кто -нибудь объяснить, как компилятор анализирует данное, если (условие) внутри?
#include
int...