默认情况下具有数学集合相等的集合类[关闭]

2023-11-24

HashSet不将设置相等语义用于默认相等操作。

var a = new HashSet<int> { 1, 2, 3 };
var b = new HashSet<int> { 3, 2, 1 };

这评估为false:

var c = a == b;

而从数学意义上来说,这两个集合是相等的。我们当然可以使用SetEquals使用集合相等显式进行比较:

var d = a.SetEquals(b); // true

如果我们创建一组这些集合:

var e = new HashSet<HashSet<int>> { a, b };

结果包含两个元素。我们需要传递一个自定义比较器来获取父集的集语义。

这是一个子类HashSet它默认实现集合语义。

public sealed class MathSet<T> : HashSet<T>, IEquatable<MathSet<T>>
{
    public override int GetHashCode() => this.Select(elt => elt.GetHashCode()).Sum().GetHashCode();

    public bool Equals(MathSet<T> obj) => SetEquals(obj);

    public override bool Equals(object obj) => Equals(obj as MathSet<T>);

    public static bool operator ==(MathSet<T> a, MathSet<T> b) =>
        ReferenceEquals(a, null) ? ReferenceEquals(b, null) : a.Equals(b);

    public static bool operator !=(MathSet<T> a, MathSet<T> b) => !(a == b);
}

(这是基于所示的一个here.)

用法示例:

var a = new MathSet<int> { 1, 2, 3 };
var b = new MathSet<int> { 3, 2, 1 };

var c = a.Equals(b);                        // true

var d = new MathSet<MathSet<int>> { a, b }; // contains one element

var e = a == b;                             // true

有更好的方法吗?

某处的图书馆是否已经有类似的课程?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

默认情况下具有数学集合相等的集合类[关闭] 的相关文章

  • 不同翻译单元中字符串文字的内存地址是否相同?

    假设我们有以下 cpp 文件 include
  • 进入嵌入式[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 缓存友好的矩阵移位功能

    我想将二维方阵的第一行移到最后一行 所以如果我有一个像A这样的矩阵 我想要得到B 我可以使用两个简单的 for 循环来做到这一点 例如 void shift int M int N int A M N int i j temp for i
  • 改进绩效反思 - 我应该考虑哪些替代方案?

    我需要动态地设置对象上的一堆或属性的值 将其称为传输对象 将在短时间内创建相当数量的此类传输对象并设置其属性 我想避免使用反射 还有其他选择吗 如果是的话 有我可以查看的示例实现吗 Use Delegate CreateDelegate h
  • ICSharpCode.Decompiler + Mono.Cecil -> 如何为单个方法生成代码?

    我可以使用 Mono Cecil 和 ICSharpCode Decompiler 生成类型或程序集的代码 但是 如果我尝试为单个方法生成代码 我将收到错误 对象引用未设置为对象的实例 你们能给我任何关于这个的提示吗 提前感谢您的所有帮助
  • FxCop 和 GAC 疯狂

    当我尝试分析依赖于模式和实践 企业库数据 以及其他 2 0 0 0 的项目时使用 FxCop FxCop 抱怨它不能 定位程序集引用 即使正在分析的应用程序 dll 是根据其编译的此版本及其在 GAC 中 如果我浏览到 GAC 尝试选择相同
  • 使用标准范围连接带有分隔符的字符串范围

    我想使用范围将跨度中包含的四个字节转换为字符串 这是输入和输出的示例 std span
  • autofac 中的条件组件注册

    是否可以根据其他组件的状态有条件地注册组件 就像是 ContainerBuilder RegisterConditionally
  • 检查字符串中是否存在所有字符值

    我目前正在做这项任务 但我被困住了 目标是读取文件并查找文件中的字符串中是否存在这些字符值 我必须将文件中的字符串与作为参数放入的另一个字符串进行比较 但是 只要每个字符值位于文件中的字符串中 那么它就 匹配 示例 输入和输出 a out
  • 如何声明返回相同类型的 Func Delegate 的 Func Delegate?

    我想编写一个方法 该方法可以完成一些工作 并最终返回另一个与原始方法具有相同签名的方法 这个想法是根据前一个字节值顺序处理字节流 而不进行递归 通过这样调用它 MyDelegate executeMethod handleFirstByte
  • 将 jstring 转换为 QString

    我正在调用一个返回字符串的 Java 函数 QAndroidJniObject obj QAndroidJniObject callStaticObjectMethod
  • 更改为通用接口对性能的影响

    我使用 Visual Studio 使用 C NET 开发应用程序 ReSharper 在我的方法原型中经常建议我用更通用的类型替换输入参数的类型 例如 如果我仅在方法主体中使用带有 foreach 的列表 则使用 List 和 IEnum
  • IOS Box2D - 身体遵循基于速度波动的点数组的特定路径

    我有一个关于身体的问题 它遵循特定的路径 首先是将身体移动到目标点的方法 const float destinationControl 0 3f b2Vec2 targetPosition path counter b2Vec2 missi
  • 在另一个类中使用一个类对象?

    我正在用 c 制作应用程序 在该应用程序中 我有一个类DataCapture cs 在同一个应用程序中 我有另一个类Listner cs 在 Listner cs 类中 我想使用以下对象DataCapture cs不创建新对象DataCap
  • 在 Windows 上构建 MLT 框架时出错

    我一直在遵循官方提供的构建指南here http www mltframework org bin view MLT WindowsBuild 我需要 MLT 来创建视频播放器 并且我选择仅安装前 4 个库 如指南中所述 FFmpeg SD
  • 如何通过反射获取透明代理的属性值?

    我的代码接收透明代理而不是原始实例 虽然这var type obj GetType 产生原始类的类型 下面的代码抛出TargetException 对象与目标类型不匹配 var value property GetValue obj nul
  • 如何同时正确使用管道和信号?

    我有 2 个孩子 我想将信号从孩子发送到父母 并将答案 随机数 为什么 为什么不 命名管道从父母发送到每个孩子 我有这个代码 include
  • GCC编译非常慢(文件大)

    我正在尝试编译一个大的 C 文件 专门用于 MATLAB mexing C 文件大约 20 MB 可用来自 GCC 错误跟踪器 https gcc gnu org bugzilla attachment cgi id 36632如果你想玩一
  • 偏专业化朋友声明

    在下面的代码中 template
  • C# p/Invoke 如何使用 DirectX 游戏的 SendInput 模拟 keyPRESS 事件

    我经常为各种机器人或其他 GUI 自动化程序模拟键盘按下事件而苦苦挣扎 我已经成功地使用以下方法模拟按键事件 INPUT kInput new INPUT 1 kInput j type SendInputEventType InputKe

随机推荐

  • 如何在android中将json对象转换为字符串..?

    我想转换自JSONObject CNo 80 CName ganesh CMail email protected CMailType home CPhNo 9878987776 CPhNoType home ClientNo 1 to C
  • 如何在android ndk中使用GraphicBuffer

    我问这个问题是参考我的问题的答案如何提高android中opengl es的显示性能 我试图构建使用 GraphicBuffer 和 ndk r9d 的代码 但它说 GraphicBuffer 没有在此范围内声明 对于eglCreateIm
  • 是否可以因自定义运行而永久更新 TeamCity 构建参数的值?

    是否可以通过自定义运行永久更新构建参数的值 例如 考虑一个配置为具有内部版本号格式的内部版本 主要 次要 补丁 build counter Major Minor 和 Patch 并在构建配置中定义为具有某些值 举个例子 假设构建号为 3
  • UIButton 作为 UINavigationbar 按钮

    我有一个标签栏应用程序 在其中一个选项卡栏中我有一个导航控制器 我正在尝试设置一个带有图像的 UIButton 作为导航栏的右侧按钮 UIButton refreshButton UIButton alloc init refreshBut
  • QComboBox 的 setPlaceholderText [重复]

    这个问题在这里已经有答案了 如果没有子类化 我可以在 QComboBox 文本中显示未进行选择的文本 例如 QLineEdit 中的 setPlaceholderText 吗 QComboBox 没有占位符文本选项 但您可以通过两种方式实现
  • 是否可以将两个调试器附加到一个进程?

    是否可以将两个调试器附加到一个进程 最近 我用 HTML5 CSS 开发了一个 Metro 风格应用程序 它调用了用 C 编写的 Window 运行时组件 我想做的是将两个调试器附加到同一个进程 一个用于 JavaScript 另一个用于
  • 刷新页面时 Socket IO 建立多个连接 - Node JS

    我开发了一个抓取工具 可以从所有网站抓取作业并将其保存到数据库中 我已经制作了自己的默认日志 在其中获取消息 错误 信息 等 我正在使用 socket io 来实时更新我的 视图以及数据库 问题是当我启动应用程序时 它完美地建立了套接字和数
  • 理想的 terraform 工作空间项目结构

    我想设置 Terraform 来管理开发 阶段 产品环境 所有环境中的基础设施都是相同的 但每个环境中的变量都存在差异 既然 Terraform 0 10 中引入了工作区 那么理想的 Terraform 项目结构是什么样的 在命名 标记基础
  • PKCS5_PBKDF2_HMAC_SHA1返回值是什么意思?

    我正在尝试使用 OpenSSLPKCS5 PBKDF2 HMAC SHA1方法 我推测如果成功则返回 0 否则返回一些其他值 我的问题是 非零返回值是什么意思 内存错误 使用错误 我的程序应该如何处理它 重试 退出 编辑 一个必然的问题是
  • Android 上的鱿鱼:最大继承深度

    这是我的设置 声纳Qube 5 6 6 SonarJava插件4 8 0 9441 Code public class BaseActivity extends android app Activity public class FooAc
  • Pandas MultiIndex DataFrame.rolling 偏移量

    为什么我不能使用偏移量rolling多索引数据框 例如 与 rng pd date range 2017 01 03 periods 20 freq 8D i pd MultiIndex from product A B C rng nam
  • 优先考虑组合而不是继承[重复]

    这个问题在这里已经有答案了 优先考虑组合而不是继承 是非常流行的短语 我读了几篇文章 每篇文章最后都说 当类之间存在纯粹的 IS A 关系时 请使用继承 一个例子来自本文 这里之间Apple and Fruit存在明显的 IS A 关系 即
  • 如何告诉 Vite 从构建中排除目录中的文件子集?

    我使用创建了一个新的 Vue 应用程序npm create vue 在运行时 该应用程序会获取配置并从中读取字符串 该字符串表示要在应用程序内呈现的组件的名称 这些动态组件位于 可插入 目录中 src App vue pluggables
  • Cholesky 分解 ScaLapack 错误

    我收到以下错误 但我不知道为什么 1 1 On entry to PDPOTRF parameter number 2 had an illegal value 1 0 On entry to PDPOTRF parameter numbe
  • 具有依赖关系的静态库

    e exe与我的自定义静态库链接 c lib 它使用 Win32 API 中定义的w dll w dll位于C Windows System32 其导入库为w lib 位于 Windows SDK 目录中 壳w lib被列为额外的依赖 in
  • VS2022 17.2.0 Preview 2.0:访问项目等时出现T4模板序列化异常

    使用VS2022 17 2 0 Preview 2 0使用T4模板生成数据层 T4的一部分使用VS互操作 DTE来访问解决方案中的项目 下面的T4是一个测试 lt template debug false hostspecific true
  • 如何可视化 d3 力导向图布局中的节点组

    我正在寻找一种将组插入到我的力导向图形可视化中的方法 到目前为止我已经找到了三个相关的例子 Cola js这将需要添加另一个库 并可能需要改造我的代码以适应这个不同的库 这个街区 这很难解开 这张幻灯片来自 mbostock 的幻灯片 这不
  • Meteor:服务器端调试

    有谁知道调试服务器端代码的好方法 我尝试启用 Node js 调试 然后使用 node inspector 但它没有显示我的任何代码 我最终使用了 console log 但这非常低效 更新 我发现以下过程在我的 Linux 机器上有效 当
  • 从 Java 调用 python 模块

    我想使用 PythonInterpreter 从 Java 调用 python 模块中的函数 这是我的 Java 代码 PythonInterpreter interpreter new PythonInterpreter interpre
  • 默认情况下具有数学集合相等的集合类[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 HashSet不将设置相等语义用于默认相等操作 var a new HashSet