标签: equality

比较 C# 中包含格式的字符串

我正在开发一个函数,它给出了一些设置 - 例如行距,输出(以字符串形式)被修改。为了测试此类场景,我使用字符串文字,如下所示的预期结果。

该方法使用字符串生成器 ( AppendLine) 生成所述输出。我遇到的一个问题是比较这些字符串。在下面的示例中,两者就其所代表的含义而言是相同的。结果是我关心的区域,但是当比较两个字符串时,一个是文字,一个不是,相等自然会失败。这是因为其中一个字符串发出行间距,而另一个字符串仅演示其包含的格式。

解决这个平等问题的最佳方法是什么?我确实关心格式,例如方法结果中的新行,这是至关重要的。

代码:

string expected = @"Test\n\n\nEnd Test.";
string result = "Test\n\n\nEnd Test";

Console.WriteLine(expected);
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)

输出:

  测试\n\n\n结束测试。
  测试


  结束测试

c# string equality

2
推荐指数
1
解决办法
2236
查看次数

Dart 成员函数相等规则

我正在尝试测试类的成员函数的相等性。这是一个小样本:

void main() {
  var foo = new Foo();    

  if (foo.someFunc == foo.someFunc)
    print("foo.someFunc == foo.someFunc");
  else
    print("foo.someFunc != foo.someFunc");
}    

class Foo {
  someFunc() {
  }
}
Run Code Online (Sandbox Code Playgroud)

这将打印“foo.someFunc!= foo.someFunc”。这里的相等运算符应该测试这些函数是否是内存中的同一对象(看起来它们应该是。)我也尝试使用相同的(foo.someFunc,foo.someFunc),但得到了相同的结果。为什么在这种情况下相等运算符不返回 true?

equality function member dart

2
推荐指数
2
解决办法
849
查看次数

如何检查两个正则表达式是否相同?

如果是 JavaScript,/\.scss$/则为正则表达式。我想检查一个正则表达式是否与另一个正则表达式完全相同:

/\.scss$/ === /\.scss$/ // false
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?请注意,我不关心正则表达式匹配什么,我只关心正则表达式的定义方式。

javascript regex equality

2
推荐指数
1
解决办法
1130
查看次数

相等是否意味着哈希值相等?

我目前正在研究图形数据类型,在这种情况下,我思考了很多有关身份和平等的语义问题。

我现在的情况如下。我有一个Vertex类型:

final class Vertex<T>: Hashable {

  static func ==(lhs: Vertex, rhs: Vertex) -> Bool { 
    return lhs === rhs
  }

  var value: T

  var hashValue: Int { 
    return ObjectIdentifier(self).hashValue 
  }

}
Run Code Online (Sandbox Code Playgroud)

如您所见,平等是由身份决定的。我这样做是出于图数据类型特定的原因,但它基本上归结为这样一个事实:顶点应该通过其标识来查看,因此只有当它们是相同(相同顶点时才被视为相等。

现在哈希值也由身份确定(使用ObjectIdentifier)。这似乎是获取哈希值的最简单方法,并且似乎也与这种类型的相等概念很好地一致。

但这让我思考......
通过属性(如果符合)来确定哈希值在语义上是否“不正确”(或者不合逻辑,value如果你T愿意的话Hashable)。
在这种情况下,两个Vertexs 可以一致地具有相等的哈希值(不仅仅是程序的一次调用),而不被视为相等。这似乎不对。

那么反过来:说实例相等应该意味着它们的哈希值相等是否明智?

hash identity equality semantics swift

2
推荐指数
1
解决办法
867
查看次数

在 C# 单元测试中比较两个 List&lt;string[]&gt; 对象

我正在尝试创建一个比较两个字符串数组列表的单元测试。

我尝试创建两个完全相同的List<string[]>对象,但是当我使用 时CollectionAssert.AreEqual(expected, actual);,测试失败:

[TestMethod]
public void TestList()
{
    List<string[]> expected = new List<string[]> {
        new string[] { "John", "Smith", "200" },
        new string[] { "John", "Doe", "-100" }
    };

    List<string[]> actual = new List<string[]> {
        new string[] { "John", "Smith", "200" },
        new string[] { "John", "Doe", "-100" }
    };

    CollectionAssert.AreEqual(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过Assert.IsTrue(expected.SequenceEqual(actual));,但也失败了。

如果我比较两个字符串列表或两个字符串数组,这两种方法都有效,但在比较两个字符串数组列表时它们不起作用。

我假设这些方法失败,因为它们正在比较两个对象引用列表而不是数组字符串值。

如何比较两个List<string[]>对象并判断它们是否真的相同?

c# arrays unit-testing equality list

2
推荐指数
2
解决办法
5796
查看次数

是否可以根据要比较的数据生成相等函数?

如果两个布尔值相同,则两个布尔值相等,两个数字相似。如果两个集合具有相同的元素,则它们相等。如果检查两组是否相等,我们可以使用以下方案/球拍函数:

\n\n
(define (same-set? l1 l2)\n  (and (subset? l1 l2) (subset? l2 l1)))\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么这样的函数是如何自动生成的呢?可以为任意数据类型生成它吗?

\n\n

等价关系的基本性质是:

\n\n

替换性质:对于任意数量a和b以及任意表达式F(x),如果a = b,则F(a) = F(b)(如果两边都有意义,即格式良好)。\n一些具体例子其中:

\n\n

对于任何实数a、b和c,如果a = b,则a + c = b + c(这里F(x)是x + c);

\n\n

对于任何实数 a、b 和 c,如果 a = b,则 a \xe2\x88\x92 c = b \xe2\x88\x92 c (这里 F(x) 是 x \xe2\x88\x92 c) ;

\n\n

对于任何实数a、b和c,如果a = b,则ac = bc(这里F(x)是xc);

\n\n

对于任何实数 a、b 和 c,如果 a = b 且 c 不为零,则 a/c = b/c(此处 F(x) 为 x/c)。 …

scheme code-generation equality equals racket

2
推荐指数
1
解决办法
250
查看次数

自定义类作为 C# 中字典的键不起作用

我最近开始学习 C#,但陷入了这个特殊情况。是的,我已经检查了前面的问题,但无法弄清楚我的代码中的问题是什么。 自定义类用作字典中的键,但未找到键 这是我能找到的最接近的一个,但此处给出的答案似乎对我不起作用。

我有一个字典注册表<Customers, string>。Customers 是一个具有 2 个字符串的类:s1 和 s2。客户可以匹配 s1 或 s2(两者都不是必需的)。

类客户:

public class Customers
    {
        public string _s1;
        public string _s2;

        public Customers(string s1, string s2)
        {
            _s1 = s1;
            _s2 = s2;
        }

        public class EqualityComparer : IEqualityComparer<Customers>
        {
            public bool Equals(Customers x, Customers y)
            {
                Console.WriteLine("Inside Equals");
                return ((x._s1.Equals(y._s1)) || (x._s2.Equals(y._s2)));
            }
            public int GetHashCode(Customers x)
            {
                return x._s1.GetHashCode() ^ x._s2.GetHashCode();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

程序.cs:

Dictionary<Customers, string> registry = new Dictionary<Customers, string>(new Customers.EqualityComparer());

Customers …
Run Code Online (Sandbox Code Playgroud)

c# hash dictionary equality

2
推荐指数
1
解决办法
293
查看次数

C++ 宇宙飞船运算符和用户定义类型:仅比较属性的子集

我有两节课。第一个组成第二个。这两个类都有自己的综合属性,不参与排序或比较。另外,我想使用std::ranges::sort第二个容器,所以我需要实现强排序。这就是我所拥有的:

struct basic
{
    std::string synthetized; // string representation of the next field.
    unsigned value;
    unsigned property;

    friend bool operator<(basic const& a, basic const& b)
    { return a.value < b.value or (a.value == b.value and a.property < b.property); }
};

struct composed
{
   basic value;
   custom_type meta;

   friend bool operator<(composed const& a, composed const& b)
   { return a.value < b.value; }
};

int main()
{
   std::vector<composed> container;
   // populating container

   // Compilation error here.
   std::ranges::sort(container);
}
Run Code Online (Sandbox Code Playgroud)

我应该如何适当有效地超载operator<=> …

c++ sorting equality c++20

2
推荐指数
1
解决办法
2303
查看次数

强制 AssertJ 按身份进行比较的惯用方法?

AssertJ的assertThat(...).isEqualTo()方法比较.equals()默认使用。这通常是正确的选择,但有时您确实想通过精确的对象标识/引用标识进行比较(==Java 中的“双等于”,Kotlin 中的“三等于” ===)。

是否有一种惯用的方法来强制 AssertJ 进行这种比较,例如我不知道的断言方法?

我能做的最好的事情就是通过在没有 AssertJ 的情况下进行比较来解决这个问题,然后仅使用它来检查生成的布尔值:

科特林:

assertThat(obj1 === obj2).isTrue()
Run Code Online (Sandbox Code Playgroud)

爪哇:

assertThat(obj1 == obj2).isTrue();
Run Code Online (Sandbox Code Playgroud)

正如我已经暗示的那样,这并不理想,因为 a) 与其他断言相比,它看起来不一致,b) 当断言失败时产生的错误消息只是说“预期为真,结果为假”,这并不像显示的那么好所讨论的不同对象(即使它们仅在内存位置上有所不同,而不是其内容不同)。

java testing equality kotlin assertj

2
推荐指数
1
解决办法
150
查看次数

Clojure 中 Java 字节数组的意外相等语义

我正在尝试检查两个字节数组之间的相等性:我正在运行以下代码:

;; Test 1
(= (byte-array [0 0 0 0])
   (byte-array [0 0 0 0])) ;; => false

;; Test 2
(= (seq (byte-array [0 0 0 0]))
   (seq (byte-array [0 0 0 0]))) ;; => true
Run Code Online (Sandbox Code Playgroud)

测试 1 失败,但测试 2 通过。这是定义的行为吗?我需要提交错误报告吗?

我期望相等运算符传递这两个断言。

equality clojure

2
推荐指数
1
解决办法
120
查看次数