linq按顺序插入元素的方法

2024-04-30

我有一个按元素的 Name 属性排序的元素集合。我需要在保持顺序的同时将新元素插入集合中。我正在寻找一种简洁的 LINQ 方法来做到这一点。我的代码如下。 “this.Children”是集合,“d”是我需要插入的新元素。需要两次遍历集合才能找到插入点。有没有办法从 First() 扩展方法获取索引? (请不要建议使用 foreach,我知道:),我正在学习 LINQ)。

谢谢! 康斯坦丁


var v = this.Children.FirstOrDefault(x => string.Compare(x.Name, d.Name) > 0);
int index = this.Children.IndexOf(v);

if (index < 0)
{
    this.children.Add(d);
}
else
{
    this.Children.Insert(index, d);
}

是的,使用超载的Select http://msdn.microsoft.com/en-us/library/bb534869.aspx其中包括索引和值:

var pair = this.Children
               .Select((value, index) => new { value, index })
               .FirstOrDefault(x => string.Compare(x.value.Name, d.Name) > 0);

if (pair == null)
{
    Children.Add(d);
}
else
{
    Children.Insert(pair.index, d);
}

请注意,这仍然是低效的 - 如果您已经知道值已排序,则可以使用二分切来找出插入索引。在不知道类型的情况下很难给出示例代码Children虽然……已经有List<T>.BinarySearch http://msdn.microsoft.com/en-us/library/w4e7fxsh.aspx and Array.BinarySearch http://msdn.microsoft.com/en-us/library/system.array.binarysearch.aspx.

学习 LINQ 令人钦佩 - 但当使用 LINQ 不是最好的方法时学习也很重要:)

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

linq按顺序插入元素的方法 的相关文章

  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得
  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • EventHandler 应该始终用于事件吗?

    我一直在愉快地使用自定义委托类型和通用编写事件Action委托类型 没有真正考虑我在做什么 我有一些很好的扩展助手Action and EventHandler这使我倾向于使用那些预定义的委托类型而不是我自己的委托类型 但除此之外 除了惯例
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 提升mapped_file_source、对齐方式和页面大小

    我正在尝试在性能很重要的上下文中解析一些大小高达几百兆字节的文本文件 因此我使用 boostmapped file source 解析器期望源以空字节终止 因此我想检查文件大小是否是页面大小的精确倍数 如果是 则使用较慢的非内存映射方法 我
  • 编写具有多种类型的泛型扩展方法时的类型推断问题

    我正在为 IEnumerable 编写一个通用扩展方法 用于将对象列表映射到另一个映射对象列表 这就是我希望该方法的工作方式 IList
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 初始化列表在 VC10 中不起作用

    我在 VC 2010 中编写了这个程序 class class1 public class1 initializer list
  • 对多个对象使用事件处理程序

    我有 20 件物品List
  • Unity,c++ 本机插件字节数组不匹配

    在我的 C 本机插件中 我有一个调用 vector
  • 如何在 Razor 编辑视图中显示选中的单选按钮 Asp net core mvc

    尽管 Razor 视图中的 Asp 网络核心代码 model List
  • 如何在c中断言两个类型相等?

    在 C 中如何断言两种类型相等 在 C 中 我会使用 std is same 但搜索 StackOverflow 和其他地方似乎只能给出 C 和 C 的结果 在C中没有办法做到这一点吗 请注意 这不是询问变量是否具有某种类型 而是询问两个类

随机推荐

  • Node.js 原生 Promise.all 是并行处理还是顺序处理?

    我想澄清这一点 因为文档 https developer mozilla org en US docs Web JavaScript Reference Global Objects Promise all对此还不是太清楚 Q1 Is Pr
  • cx_freeze:在以下目录中找不到可用的init.tcl

    据我所知 cx freeze是唯一能够制作 Python 脚本的应用程序 exe文件 不过 我想做一个 GUIexe在 Python 3 中 冻结一个简单的 Tkinter GUI 并运行 exe 后 出现以下错误 gt tkinter T
  • 当模型无效时,使用asp.net core返回到视图内的部分视图,并显示错误消息

    我有一个模态引导程序 我想显示引导模式的验证错误 但是 当我将模型留空并单击提交按钮时 它只是被视为独立页面 部分视图 model WebApplication1 Models Book
  • VB.NET:“语句 lambda 无法转换为表达式树”编译时错误

    为什么我可以执行以下操作 Dim qNodes As IQueryable Of XmlNode xDoc ChildNodes AsQueryable Dim test qNodes Where Function node True 尽管
  • Rails,单击 link_to helper 后未加载 JavaScript

    当我在 Rails 中使用 link to 帮助程序时 我在加载 javascript 时遇到了一些问题 当我手动输入 localhost 3000 products new 的 url 或重新加载页面时 JavaScript 会加载 但是
  • 在 iOS SDK 中与 Java RMI 服务器通信

    有什么方法可以在 iPhone 上构建一个能够与 Java RMI 服务器通信的客户端吗 我计划将该应用程序放在应用程序商店中 因此很高兴知道苹果是否允许通过任何方式来执行此操作 None
  • 从 JVM 线程本地空间卸载 Clojure 变量

    我正在 Clojure 中为 BaseX 编写一个插件 通过 lein uberjar 构建 并包含 Clojure 解释器 在大多数情况下 这效果很好 然而 当通过 BaseX HTTP 实例运行时 评估在 Jetty 的线程池内进行 而
  • 如何列出引用 SQL Server 中给定表的所有外键?

    我需要删除 SQL Server 数据库中高度引用的表 如何获取删除表时需要删除的所有外键约束的列表 SQL 答案比在 Management Studio 的 GUI 中单击有关更好 不知道为什么没有人建议但我使用sp fkeys查询给定表
  • NSMutableArray 销毁

    我有一个数组NSMutableArray与快乐的物体 每当我尝试清除所有对象的数组并重新填充它时 这些对象就会恶意地打开 泄漏 我 它是在 init 函数中分配的 如下所示 self list NSMutableArray array 我用
  • Chrome 浏览器自动向下滚动内容(当没有人要求时)

    我们有丰富的页面 其中有一个包含动态内容的小块 直到最近一切都运转良好 现在 Chrome 浏览器以某种方式 捕获 页面上的一个 div 并向下滚动整个内容 用语言很难解释 但演示起来却容易得多 这是测试页 只需在 Chrome 中打开它
  • 基于登录状态 React Native 的动态 DrawerNavigator

    我需要一个 DrawerNavigator 它在用户登录或注销时显示不同的选项 如下所示 未登录 sign up log in info 登录 My Account Some Actions Info Log Out
  • Python:从区间到值的映射

    我正在重构一个函数 给定一系列隐式定义间隔的端点 检查间隔中是否包含数字 然后返回相应的值 不以任何可计算的方式相关 现在处理这项工作的代码是 if p lt 100 return 0 elif p gt 100 and p lt 300
  • 使 String.CharacterView.Index 符合 Strideable:使用 stride(to:by:) 时出现致命错误:“无法增加 endIndex ”

    问题 当试图跨过去时String CharacterView Index索引 例如一步2 extension String CharacterView Index Strideable let str 01234 for in str st
  • 无法安装 MvcMailer

    我尝试通过在程序包管理器控制台中输入命令 Install Package MvcMailer 来安装 Mvc Mailer 但收到以下错误消息 Successfully installed MvcMailer 1 1 Successfull
  • 拉维尔 |如何使用多个属性执行搜索

    我正在创建属性网站 并且正在使用多个属性进行搜索 但问题是在搜索控制器中我有非常大的代码并且非常难以处理 laravel 中是否存在其他解决方案 list property Listing property where property t
  • Python:将字典转换为字节

    我正在尝试将字典转换为字节 但在将其转换为正确的格式时遇到问题 首先 我尝试使用自定义架构映射字典 模式定义如下 class User def init self name None code None self name name sel
  • RESTful API 应该有架构吗?

    最近有人告诉我 一个合适的 RESTful API 应该为其接受和返回的资源表示定义一个模式 例如 用于 XML 的 XSD 和用于 JSON 的 JSON 架构 然而 在我读过的所有关于 REST 的书籍和文章中 这一点似乎不仅没有突出
  • 将 TPopupMenu 与窗体的右侧对齐?

    TPopupMenu 如何与窗体的右侧对齐 问题是 在调用之前似乎没有办法获取弹出菜单的宽度Popup X Y Integer 我正在尝试获得与 Chrome 中的系统菜单类似的行为 你也可以只设置Alignment http docwik
  • 引导表上的滚动条

    I have table渲染在一个panel这是在一个modal 由于表格相对较大 我想将其行数限制为 5 行 以便模式不会滚动 我浏览了 SO 和谷歌 到处都看到我需要设置overflow y auto or overflow y scr
  • linq按顺序插入元素的方法

    我有一个按元素的 Name 属性排序的元素集合 我需要在保持顺序的同时将新元素插入集合中 我正在寻找一种简洁的 LINQ 方法来做到这一点 我的代码如下 this Children 是集合 d 是我需要插入的新元素 需要两次遍历集合才能找到