请教C#中的List<T>,筛选list中特定元素的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教C#中的List<T>,筛选list中特定元素的方法相关的知识,希望对你有一定的参考价值。

//Account是账号表类,Trade是交易表类,各表的属性已封装好了
Dictionary<string,Account> accounts=new Dictionary<string,Account>();
List<Trade> trades=new List<Trade>();

public string Take(string code, double money, string memo)

if (!accounts.ContainsKey(code))
return "该账号不存在!";

double balance = accounts[code].Balance - money;
if (balance < 0)
return "取款余额不足!";

accounts[code].Balance -= money;

Trade trade = new Trade();
trade.Code = code;
trade.Money = money;
trade.Date = DateTime.Now;
trade.Memo = memo;
trade.Thistype = TransType.Take;
trades.Add(trade);

return "取款成功!";


我现在是想从这个List对象trades中筛选出多个trade元素,这些trade元素的Code字段全都是"0001",我该用什么方法删除掉?请各位高手指教
这位fnsword朋友,你用trades对象调用FindAll()方法,怎么在方法参数里传递了一个方法的定义啊?看不懂。。。晕

参考技术A 简单的掉渣:
List<Trade> newtrades = trades.FindAll(delegate(Trade p) return p.Code == "0001"; );

要充分利用.net的优势,复杂问题简洁化,简洁不简单……

问题补充:先汗一下,这是匿名函数本回答被提问者采纳
参考技术B 循环查找
删除用
Remove()

RemoveAt()

请教C#中的List<T>,删除list中特定元素的方法

//Account是账号表类,Trade是交易表类,各表的属性已封装好了
Dictionary<string,Account> accounts=new Dictionary<string,Account>();
List<Trade> trades=new List<Trade>();

public string Take(string code, double money, string memo)

if (!accounts.ContainsKey(code))
return "该账号不存在!";

double balance = accounts[code].Balance - money;
if (balance < 0)
return "取款余额不足!";

accounts[code].Balance -= money;

Trade trade = new Trade();
trade.Code = code;
trade.Money = money;
trade.Date = DateTime.Now;
trade.Memo = memo;
trade.Thistype = TransType.Take;
trades.Add(trade);

return "取款成功!";


现在我想从这个List对象trades中删除多个trade元素,这些trade元素得Code字段全都是"0001",我该用什么方法删除掉?请各位高手指教

循环删,List都是可以用下标访问的,写个循环,找到相应的元素,然后RemoveAt()。循环也许要倒写。
for( int i = trades.Count - 1; i >= 0; --i )

  if( trades[i].Code == "0001" )
  
    trades.RemoveAt( i );
  
参考技术A 首先code是标识不应该相同.你的程序中怎么会有这么多想通的0001?
其次.你得到许多相同的,那就应该遍历删除.不然会造成冗余.
应该在trade.Code = code;的时候去判断trades里面有没有一样的数据.不应该直接add.

以上是关于请教C#中的List<T>,筛选list中特定元素的方法的主要内容,如果未能解决你的问题,请参考以下文章

VBA 等效于 C# 中的 List<T> [重复]

List<T>的排序和筛选

C# 中实现对List中的数据查重操作

从 C# 中的 List<T> 中删除重复项

C# 2个List集合重复数据筛选

如何从 C# 中的通用 List<T> 中获取元素? [复制]