C# 如何通过特定比较从LinkedList中删除项目?
我有C# 如何通过特定比较从LinkedList中删除项目?,c#,C#,我有LinkedList有Remove(item)方法作为paramitem获取 我想知道通过特定参数删除项目必须覆盖哪些内容 例如,我有LinkedList,在MyClass中我有变量int index,我想用这个值进行比较 比如,我正在寻找一些override compare(Obj)方法,当我根据需要的值从LinkedList中删除项目时,我可以覆盖和比较对象 编辑 方法,其中不适用,因为实际上我有一个通用的LinkedList实现,实际上我的LinkedList看起来像LinkedLis
LinkedList
有Remove(item)
方法作为paramitem
获取
我想知道通过特定参数删除项目必须覆盖哪些内容
例如,我有LinkedList
,在MyClass
中我有变量int index,我想用这个值进行比较
比如,我正在寻找一些override compare(Obj)
方法,当我根据需要的值从LinkedList
中删除项目时,我可以覆盖和比较对象
编辑
方法
,其中
不适用,因为实际上我有一个通用的LinkedList
实现,实际上我的LinkedList
看起来像LinkedList
,它可以是任何类型。因此,我不能使用where
,因为实际上我不知道确切的类型最简单的方法是设置一个变量,该变量将检查链接方式中的每个值是否是要删除的值,并设置一个变量,该变量比第一个变量跟踪的值晚一个值/步
这样,当主变量(进行检查的变量)发现要删除的列表值时,可以将后面变量的“下一个值”设置为等于主变量的“下一个值”,从而覆盖和删除它
每次增加主变量时,也要增加behind变量,以便使其落后一步
图表(左为前,右为后):
基本上,只需设置两个变量:一个是检查每个链表值以找到要删除的值,另一个是在其后面,以便在找到要删除的值时,将其后面的变量设置为主变量前面的值,从而覆盖删除的部分。使用System;
using System;
using System.Collections.Generic;
namespace ConsoleAppCore
{
public static class Extension
{
public static List<dynamic> Where(this IEnumerable<dynamic> list, Func<dynamic, bool> func)
{
List<dynamic> result = new List<dynamic>();
foreach(dynamic item in list) {
try {
if (func(item))
result.Add(item);
}
catch {
continue;
}
}
return result;
}
}
class YourClass
{
public int x = 5;
}
class Program
{
static void Main(string[] args)
{
LinkedList<dynamic> list = new LinkedList<dynamic>();
list.AddAfter(list.AddAfter(list.AddAfter(list.AddAfter(
list.AddAfter(list.AddAfter(list.AddAfter(list.AddFirst(
(decimal)1), 2), (double)3), "Hello"), 5), new YourClass()), (float)7), 8);
var newlist = list.Where(i => i == "Hello");
// only one logical operation at a time (caused exceptions break the logic)
newlist.AddRange(list.Where(i => i.x == 5));
newlist.AddRange(list.Where(i => i > 5));
foreach(var i in newlist)
Console.WriteLine(i);
}
}
}
使用System.Collections.Generic;
名称空间控制台AppCore
{
公共静态类扩展
{
公共静态列表,其中(此IEnumerable列表,Func Func)
{
列表结果=新列表();
foreach(列表中的动态项){
试一试{
if(职能(项目))
结果.添加(项目);
}
抓住{
继续;
}
}
返回结果;
}
}
你的班级
{
公共整数x=5;
}
班级计划
{
静态void Main(字符串[]参数)
{
LinkedList=新建LinkedList();
list.AddAfter(list.AddAfter)(list.AddAfter)(list.AddAfter)(list.AddAfter(
list.AddAfter(list.AddAfter)(list.AddAfter(list.AddFirst(
(十进制)1),2),(双精度)3),“你好”,5),新的YourClass(),(float)7),8);
var newlist=list.Where(i=>i==“Hello”);
//一次只能执行一个逻辑操作(导致异常中断逻辑)
AddRange(list.Where(i=>i.x==5));
AddRange(list.Where(i=>i>5));
foreach(新列表中的var i)
控制台写入线(i);
}
}
}
输出
您好,ConsoleAppCore.YourClass,7,8查找不相等的项而不是相等的项:LinkedList myClass=new LinkedList();LinkedList结果=(LinkedList)myClass.Where(x=>x.item!=5);这回答了你的问题吗?我不确定,但还不够var new list=LinkedList.Where(x=>x.index==1.ToList();foreach(列表中的var项){LinkedList.Remove(item)}我会创建我自己的对象并覆盖Remove方法,或者我想你可以尝试扩展方法并用你自己的方法扩展LinkedList。你可以查找以下内容:,在你的
MyClass
上实现IEquatable
,他不在乎value-type