如何对列表使用二分查找

2024-01-07

让我们从 List BinarySearch 的重载开始:

public int BinarySearch(T item, IComparer<T> comparer);

众所周知,在使用 BinarySearch 之前应该使用适当的 IComparer 对列表进行排序。但是:要搜索列表,您必须提供 T 项。当人们习惯于根据列表中的项目的属性(即使用 Linq 或委托/谓词)搜索这些项目时,这是相当意外的。因为当我已经有了我的 T 项目时,我就不必搜索它了!

现在,我正在用 C# 实现 C++ 代码,发现 C++ 程序员在其代码中到处都使用了 C++ 风格的二进制搜索,如下所示。首先他制作了一个新的T物品,并赋予了这个T物品他正在寻找的属性。然后他用它搜索列表,找到列表中具有相同属性的项目的索引。 C++ 比较器当然适应了这些属性。

因此,这是一种在列表中查找项目的完全不同的方式。二分查找使得dummyT 项并搜索可以检索的索引real列表中的 T 项。从 Linq 的角度来看,这感觉不自然。

我的问题是:

我是否正确描述了 BinarySearch 背后的想法?

您是否认为可以在不先创建虚拟 T 项的情况下将 Linq 样式搜索与 BinarySearch 结合使用?


Did I give a correct description of the idea behind BinarySearch?
Yes.

Do you think it is possible to use a Linq style search with BinarySearch without making a dummy T item first?
不是目前的形式。您可以使用一个包装器来为您创建虚拟 T,但它仅适用于特定的 T(使用无参数构造函数等)。

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

如何对列表使用二分查找 的相关文章

  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12

随机推荐

  • 将参数从 Jenkinsfile 传递到共享库

    我有几个组件 带有自己的 Bitbucket 存储库的代码项目 每个组件都有一个 Jenkinsfile 如下所示 properties parameters string defaultValue description List of
  • Azure AD B2C - 从所有会话中注销用户

    我有 3 个网站使用一个 B2C 租户 我被要求进行设置 以便当用户退出一个网站时 退出所有网站 如果他们的帐户被删除 情况也是如此 我认为我必须在每个请求上引入对 Azure 的调用 以确定用户是否仍然登录 但据我所知 没有一个 Grap
  • 如何禁用 HTML 标签?

    如果已经设置了标签 我想禁用它 例如 使用禁用菜单disabled true 或者其他的东西 我可以使用 PHP 完全删除标签 但我已经设计了它的样式 只想禁用它 是否可以 不 据我所知 没有任何仅 CSS 的方法可以按照您描述的方式禁用链
  • Python 字符串格式化:“%”比“format”函数更有效吗?

    我想比较不同的变量以在 Python 中构建字符串 using 连接 称为 加 using using join list using format功能 using 0
  • WPF:TreeViewItem 绑定到 ICommand

    我正忙于在 WPF 中创建我的第一个 MVVM 应用程序 基本上我遇到的问题是我有一个 TreeView System Windows Controls TreeView 我已将其放置在 WPF 窗口上 我决定将绑定到 CommandVie
  • 更改表类似

    是否可以在 ALTER TABLE 上使用类似于 MySQL 中的 CREATE TABLE 的 LIKE 语句 例如 创建表 db tbl1 像 db tbl2 这会克隆数据库表的结构 我想更改具有相同列的现有表 但要选择另一个表的主键
  • 如何设置字符串的颜色[重复]

    这个问题在这里已经有答案了 有谁知道我将如何设置将使用打印的字符串的颜色System out 这是我目前拥有的代码 System out println TEXT THAT NEEDS TO BE A DIFFERENT COLOR 安慰
  • 将 pandas 数据框中的多列拆分为行

    我有一个 pandas 数据框 如下所示 ticker account value date aa assets 100 200 20121231 20131231 bb liabilities 50 150 20141231 201312
  • 正则表达式的局限性? [关闭]

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

    我想为我们的库创建模块 所以每次我们调用时 我们都可以使用import Api Map from ourlibrary 目前我正在使用以下 import Api from Library Api import MapPage from ma
  • 非常非常大的实体组的交易

    我正在尝试设计一个可以容纳大量数据的数据模型 有大量数据经验的人对此有什么反馈吗 即 example only not meant to compile public class TransactionAccount private lon
  • 如何对每小时时间序列重新采样以在特定时间开始并在 24 小时后结束

    我想从一天中的特定时间开始 在我的情况下 将从 2020 年 2 月 1 日 06 UTC 开始 对我的数据框进行重新采样 包括每小时降水量值 频率为 24 小时 2020 02 01 每小时数据帧图像 I tried df df resa
  • PHP,如何重定向/转发带标头和正文的 HTTP 请求?

    我有一个 PHP 页面 main php 位于服务器 1 上 我在服务器 2 上有一个 PHP 页面 main php 同一页面 不同的代码 main php 是一个 Web 服务 我想转发对服务器 1 服务器 2 发出的完整 HTTP 请
  • Angular - 生成的表格单元格上的(单击)事件

    我一直在尝试在动态生成的表格中的单元格上添加 单击 事件 HTMLtoAdd any Input roles string ngOnInit let alphabet A B C D E F G H I J K L M N O P Q R
  • 如何用类创建div

    我正在尝试创建一个 div 并给他上一堂课 但它不起作用 有人可以帮助我吗 document ready function input type checkbox each function this after div div class
  • Vue.js - 如何将 props 传递给孙子

    我有以下应用程序结构 RegistrationView holds the data logic like get post RegistrationForm holds the form Registration Radio Compon
  • 使用 JSch 跳过 Kerberos 身份验证提示 [重复]

    这个问题在这里已经有答案了 我正在使用Connect 方法中的Ssh下面的 Java 类用于使用 SSH JSch 连接到服务器并在服务器中运行命令 问题是运行时Connect 服务器提示以下消息 Kerberos username Ker
  • clojure 中惯用的文件锁定?

    我有一组来自队列的 future 处理作业 涉及写入文件 确保一次只有一个未来访问特定文件的惯用方法是什么 使用代理而不是锁来确保这一点怎么样 我认为使用代理来保护共享的可变状态 无论它是在内存中还是在磁盘上 在 clojure 中比使用锁
  • 活动标题语言有问题

    我的应用程序中有两种语言 值 strings xml and 值 ru strings xml当我以编程方式更改语言时 所有字符串都会翻译 但活动标题不变 我在所有活动中使用 SharedPreferences prefs Preferen
  • 如何对列表使用二分查找

    让我们从 List BinarySearch 的重载开始 public int BinarySearch T item IComparer