List 上的 BinarySearch 似乎返回奇怪的结果

2023-12-06

我对 C# 很陌生。我创建了一个 List 对象,然后对特定项目执行 BinarySearch。但搜索结果似乎很奇怪。这是代码:

class Element
{
    public int x;
    public Element(int val) { x = val; }
}
class MyContainer : IComparable<MyContainer>
{
    public Element elem;
    public MyContainer(int val) { elem = new Element(val); }
    public MyContainer(Element e) { elem = e; }
    public int CompareTo(MyContainer obj)
    {
        if (elem.x < obj.elem.x) { return -1; }
        else if (elem.x == obj.elem.x) { return 0; }
        else { return 1; }
    }
}
class Program
{
    static void Main(string[] args)
    {
        MyContainer container1 = new MyContainer(100);
        MyContainer container2 = new MyContainer(21);
        MyContainer container3 = new MyContainer(-122);
        Element elemObj = new Element(-122);

        List<MyContainer> list = new List<MyContainer>();
        list.Add(new MyContainer(80));
        list.Add(container1);
        list.Add(container2);
        list.Add(container3);
        list.Add(new MyContainer(90));
        foreach(MyContainer c in list)  Console.WriteLine(c.elem.x);

        if (list.Contains(container3) == true) Console.WriteLine("present");
        else Console.WriteLine("NOT present");
        Console.WriteLine("Search result:::"+list.BinarySearch(new MyContainer(elemObj)));
        Console.WriteLine("Search result:::" + list.BinarySearch(container1));
        Console.WriteLine("Search result:::" + list.BinarySearch(container2));
        Console.WriteLine("Search result:::" + list.BinarySearch(container3));
    }
}

输出如下:

80
100
21
-122
90
present
Search result:::-1
Search result:::-6
Search result:::2
Search result:::-1

为什么只找到了值21对应的元素,而其他的没有找到


您的列表一开始就没有排序。二分查找only当原始输入已排序时起作用。重点是你知道如果list[x] = y, then list[a] <= y对全部a < x and list[a] >= y对全部a > x.

因此,要么您需要首先对列表进行排序,要么需要选择不同的搜索方式(例如,使用单独的基于哈希的字典,或者仅进行线性搜索)。

另请注意,您的CompareTo方法可以更简单地实现:

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

List 上的 BinarySearch 似乎返回奇怪的结果 的相关文章

  • “RouteCollection”不包含“MapMvcAttributeRoutes”的定义

    我尝试使用基于属性的路由 但是当我尝试以下代码片段来激活基于属性的路由时 我收到以下错误消息 RouteCollection 不包含定义 MapMvcAttributeRoutes 这是我的代码 public class RouteConf
  • C中函数指针的递归声明

    我想声明一个返回指向相同类型函数的指针的函数 我想用它来实现如下状态机 typedef event handler t event handler t event t compilation error event handler t st
  • 动态选择和更新 LINQ 结果集中的列值

    我有一个场景 其中存在 LINQ 结果集 我使用了以下查询 var stockDetails from d in db BloodBanks where d bbUserName Session username ToString sele
  • 如何通知父线程所有子线程都已终止?

    我有一个控制台应用程序正在移植到 WPF 该应用程序有 3 个工作线程 在将一些输出结果打印到屏幕上之前 这些线程都连接到主线程 我的理解是 如果我尝试在 WPF 应用程序中执行相同的操作 GUI 将被阻止并且不会响应用户 那么如何通知父线
  • C++ 和序列化:有什么方法可以进行某种内省吗?

    我读过一些例子维基百科 http en wikipedia org wiki Type introspection C 2B 2B但我正在寻找一些现实生活中的例子 如何使用内省 为什么 它有助于编写干净的代码 以及代码本身 例如 有没有办法
  • 当 f & g 修改同一个全局变量时,表达式 f() > g() 的值是否未定义或未指定?

    UPDATE 由用户标记ecatmur 它是重复的在 C99 中 f g 是未定义还是只是未指定 https stackoverflow com questions 3951017 in c99 is fg undefined or mer
  • 比较 LINQ to SQL 中的两个日期

    我有一个数据库 其中有一个名为会议的表 会议日期使用以下格式存储在此表中 May 2nd 2011 例如 格式为5 2 2011 我的要求是获取两个日期 例如 2011 年 4 月 25 日和 2011 年 5 月 2 日 之间的会议 并编
  • 计算复杂数组的abs()值的最快方法

    我想计算 C 或 C 中复杂数组元素的绝对值 最简单的方法是 for int i 0 i lt N i b i cabs a i 但对于大向量来说 速度会很慢 有没有办法加快速度 例如使用并行化 语言可以是 C 或 C 鉴于所有循环迭代都是
  • & 运算符的含义是什么?

    在下面的代码中 Expression
  • 多维数组和指向指针的指针

    创建多维数组时char a 10 10 根据我的书 它说你必须使用类似于char a 10 将数组传递给函数 为什么必须这样指定长度 您不是只是将双指针传递给 with 并且该双指针不是已经指向分配的内存吗 那么为什么参数不能是char a
  • 试图使用加密来混淆我的项目打破了它

    我试图尝试不同的混淆选项 为了做到这一点 我首先尝试了加密货币 以下是我遵循的步骤 打开加密向导并选择一些选项 选择我的解决方案文件 完成向导后 我看到有些 Dll 被很好地混淆了 但我的项目现在无法构建 我注意到的两件事是 我的文件夹中有
  • 如何从Web JavaScript应用程序获取桌面C#程序中的变量

    我遇到一个问题 有两个应用程序 一种是 C 中的桌面应用程序 另一种是 javascript 中的 Web 应用程序 运行桌面应用程序中的一些变量或信息需要传输到Web应用程序 有谁知道如何解决这个问题 有人愿意提供更多细节来解决这个问题吗
  • C++:LPWSTR 在 cout 中打印为地址

    我有一个类型变量LPTSTR 我打印到std cout with lt lt 在 ANSI 系统中 不知道它是在哪里确定的 它工作得很好 它打印了字符串 现在 在 Unicode 系统中 我得到的是十六进制地址而不是字符串 那么 为什么LP
  • 生成范围 [min,max] 内的随机数 [重复]

    这个问题在这里已经有答案了 我正在使用 C 生成范围 min max 内的整数随机数 我在用 int random int int min int max return min rand max min 但我认为上面的代码适用于范围 min
  • 如何在asp.net core 6中注入IConfiguration

    web api 应用程序中不再有 Startup cs 我们以前可以注入IConfiguration进入那个Startup class public class Startup public Startup IConfiguration c
  • 如何创建和使用类箭头运算符? [复制]

    这个问题在这里已经有答案了 因此 在到处研究之后 我似乎找不到如何创建类箭头运算符 即 class Someclass operator gt 我只需要知道如何使用它并正确使用它 它的输入是什么 它返回什么 我如何正确地声明 原型化它 运算
  • 用于 nmap 输出的 C++ xml 解析器

    我是 nmap 的新手 我在 nmap 教程中看到 https nmap org book man output html https nmap org book man output html oX 选项可用于获取 xml 格式的 nma
  • 使用 MVC5、Ajax、C# 和 MSSQL Server 级联 DropdownList

    我对来自 Windows 窗体和三层架构的 MVC 非常陌生 我试图找出使用从数据库填充的级联下拉列表 DDL 我使用 MS SQL Server 2012 VS 2013 目前我正在研究用户调查问卷 用户可以从 DDL 的多个答案中进行选
  • “显式”关键字对返回值优化 (RVO) 有何影响?

    以下代码工作得很好 显示 RVO struct A A int cout lt lt A A n constructor A const A cout lt lt A A const A n copy constructor A foo r
  • asp.net mvc GET 请求上的 formcollection 应该为空

    我正在发布一个简单的操作 public void Login FormCollection formCollection 即使查询字符串值很少 formcollection Count is 0 是靠行为吗 FormCollection 使

随机推荐

  • 为什么没有从 std::string_view 到 std::string 的隐式转换?

    有一个隐式转换std string to std string view并且它并不被认为是不安全的 尽管如果程序员这样做肯定可能会导致大量悬空引用不小心 另一方面 没有隐式转换std string view to std string使用相
  • 如何在 TableViewController 上方添加 UIView

    我想在我的表格视图上方显示一个 UIView 出于测试目的 我使用了搜索栏 以消除代码中任何可能的问题 我的设置 标签栏控制器我的自定义表视图控制器看法TableView 用于自定义单元格高度 搜索栏 我将搜索栏放置在 窗口 的顶部 并下拉
  • 多态性和数据隐藏:基类是否会覆盖或忽略派生类的访问限制?

    请看下面的代码清单 include
  • jsTree - 使用 AJAX/C#Web 方法动态填充树

    我有一个 div 我想用 jsTree 填充它 我得到了树应该显示的 正在加载 图标 但是 即使没有抛出错误 似乎也会出现 JavaScript 错误 我从 AJAX 请求加载文件夹结构 如下所示 Documents aspx GetFol
  • React Native 和全局可访问的对象

    我在 React Native 上度过了一段非常糟糕的时光 并且能够从更深层次的函数中访问函数 变量和对象 老实说我以为Redux这将是我的可取之处 但我也遇到了完全相同的障碍 一个例子 export class Home extends
  • 如何在专注于电视 LazyRow 的同时始终专注于第一项?

    我正在尝试实现一个 TVLazyRow 当我们关注该行上方其他可组合项的行时 它必须始终首先关注第一个项目 目前 按下时 焦点将转到行中位于上面可组合项正下方的项目 我怎样才能实现这种行为 这是我的代码以获取更多上下文 val tvList
  • UWP - 旋转图像,同时保持其与网格对齐,仅使用 XAML

    Using Windows 模板工作室 我创建了一个 主要是自动生成的 示例 UWP 应用程序 它在 GridView 中显示一堆图像 为了旋转它们 我使用了以下 xaml 注意RenderTransform我添加的块以及该范围内的注释
  • 如何使用 urllib2 从 Python 中打开的 url 中提取特定数据?

    我是 Python 新手 正在尝试制作一个非常基本的网络爬虫 例如 我制作了一个简单的函数来加载显示在线游戏高分的页面 所以我能够获取 html 页面的源代码 但我需要从该页面中提取特定的数字 例如 网页如下所示 http hiscore
  • while (cin >> x) 和文件结束问题

    我对发生的事情有点困惑 我正在玩 Accelerated C 中的一些程序 并且在其中一个早期程序中遇到了问题 第 35 页 如果您附近碰巧有一个副本 它使用这个片段 while cin gt gt x count sum x count
  • 上传时 EPIPE(管道破裂)?

    我的代码有问题 但我不知道 E 日志报告在哪里 04 08 05 47 46 745 E Upload Server 20080 Starting storage sdcard1 Music Piano my favourites 11 T
  • 具有索引访问的哈希集

    我需要一个数据结构 允许我向其中添加 项目 不允许重复 通过索引访问集合 我正在考虑哈希集 但是HashSet没有索引 满足上述需求的数据结构是什么 源自的集合怎么样KeyedCollection 这表示项目的集合 其中每个键都源自项目本身
  • Flutter文本省略号删除最后一个单词

    我想使用 TextOverflow ellipsis 但它最后删除 for 使其成为省略号 并且看起来非常难看 我怎样才能做到不删除任何单词 例如 当我使用 fade 和 softwrap false 进行制作时 它可以按我想要的方式工作
  • 如何使用cloudbuild.yaml在GCP上配置redis?

    我正在尝试在 GCP 上设置 CI CD 管道 我有一个使用 Redis 作为数据库的 NodeJS 应用程序 我正在尝试在 GCP 上配置 redis 我已经尝试了下面的配置 但是一旦执行了redis步骤 它就会一直等待redis连接并且
  • R中基于行名合并数据框

    如何合并两个数据框的列 其中包含一组不同的列 但some具有相同名称的行 两个数据框中都没有出现的行的字段应该用零填充 gt d a b c d e f g h i j 1 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9
  • Android - 构造函数 ActionBarDrawerToggle 未定义

    我在 oncreate 函数中使用此代码通过按应用程序图标打开导航抽屉 ActionBarDrawerToggle mDrawerToggle new ActionBarDrawerToggle this host Activity Dra
  • Spring Data Neo4j -repository.save 和 @Indexed(unique=true)

    今天我尝试了Spring Data Neo4j 终于可以使用了somehow 我在用着 春季4 0 2 Spring数据Neo4j 3 0 0 查询DSL 3 3 1 Neo4j 2 0 1 这是我的配置 Configuration Ena
  • Joomla 和 MySQL

    Joomla 上是否有关于在 PHP 中通过 MySQL 进行数据库查询的具体文档 我真正在寻找什么 Joomla 是否实现了自己的数据库包装器 如果没有 建议使用指定的配置参数创建一个 Joomla 是否能够参数化其查询以防止 SQL 注
  • 部分唤醒锁不起作用

    我的应用程序有activities和背景service必须运行24 7 我的应用程序必须通过以下方式与服务器通信Wi Fi发送和接收信息 Problem 每当服务器发送任何警报时 我的应用程序都应该接收并弹出该应用程序 无论它是在前台还是后
  • 在 ~/.bashrc 中设置的变量并在 shell 脚本中访问它们

    我在 bashrc 的最顶部有这个 before非交互式 shell 的返回 FOO BAR export FOO echo HELLO WORLD If not running interactively don t do anythin
  • List 上的 BinarySearch 似乎返回奇怪的结果

    我对 C 很陌生 我创建了一个 List 对象 然后对特定项目执行 BinarySearch 但搜索结果似乎很奇怪 这是代码 class Element public int x public Element int val x val c