c# - 从数组中删除屏蔽的条目

标签 c# algorithm

任务是在输入为null 时保持对象数组不变,否则删除输入指定位置上的元素。我已经让它工作了,但我对代码质量非常不满意。

List<Stuff> stuff = new List<Stuff>{ new Stuff(1), new Stuff(2), new Stuff(3) };
String input = "5";
if(input == null)
  return stuff;    

int mask = Int32.Parse(input);
for (int i = stuff.Count - 1; i >= 0; i--)
  if ((mask & (int)Math.Pow(2, i)) == 0)
    stuff.RemoveAt(i);
return stuff;

实际获得输入以及例如String.Empty 会引起问题,不用考虑。让我们假设这些都已处理。

如何使代码更高效? 如何使语法更紧凑和易于理解?

最佳答案

您可以使用带有以下语句的 Linq,而不是向后运行的循环。

stuff = stuff.Where( (iStuff, idx) => (mask & (int)Math.Pow(2, idx)) != 0 );

或者使用按位更酷。

stuff = stuff.Where((_, index) => (mask >> index & 1) == 1);

它使用了 Where 的重载,它可以访问序列中的位置,如记录 here .对于类似的任务,还有 Select 的重载,它提供对索引的访问,如记录 here .

关于c# - 从数组中删除屏蔽的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23960258/

相关文章:

c# - 在静态方法中找不到 request.querystring

algorithm - 对称双射字符串算法?

c# - 替换c#中字符串的最后一个字符

c# - Guids 的 SQLite 参数问题

c# - 分开一个长字符串

c# - 如何在 ASP.NET Core 5.0 中的 Startup.cs 的 ConfigureServices 方法中执行日志记录

java - 找到由给定数字整除的两位数字组成的最小数字

algorithm - 该算法的空间复杂度是多少(n 或 log(n))?

c# - 不同种子的 O log(N) 中的斐波那契数列

c# - Dijkstra 的算法实现给出了不正确的结果