c# - Linq 获取与条件匹配的索引列表以过滤另一个列表

标签 c# linq

我通过一些像素数学运算得到了一个列表,例如:

List<double> MList = new List<double>(new double[]{ 0.002, 0.123, 0.457, 0.237 ,0.1});

我想使用 Linq 从该列表中检索低于某个值的项目的所有索引,因此如果要比较的值是 0.15,则将得到以下索引: 0,1,4

List<double> MClose = new list<double>();
double compare = 0.15;
List<double> MClose = MList.Where(item => item < compare).Select((item,index) => index);

我希望到目前为止一切顺利,然后我想使用这个获得的索引来针对另一个列表使用。这是一个由 RGB 值组成的列表,仅根据该索引选择的值构建一个新列表。

class RGB{int r;int g; int b}
list<RGB>=colors = new RGB(){new RGB[,,]{{10,10,2},{13,11,2},{15,16,17},{33,13,2},{35,116,117}}};

我没有经常使用 Linq,我想知道这是否可以通过 Linq 进行编码,甚至可能是单行代码?,我很好奇答案能有多小。 而且(Linq 的像素编辑速度会很快吗),我在这里处理宽度痉挛图,通常是 3x3 到 64x64 像素的数据。

最佳答案

List<double> MClose = MList.Where(item => item < compare).Select((item,index) => index);

首先,您将 MClose 定义为 List<double>但你的最后.Select((item,index) => index)将返回IEnumerable<int> - 这不是一个列表,而是一个可以迭代的集合。使用var自动推断 MClose 的类型,并使用 .ToList()这样迭代的结果只计算一次并存入内存:

var MClose = MList.Where(item => item < compare).Select((item,index) => index).ToList();

然后您可以使用.Where带索引的子句:

var filteredColors = colors.Where((c,index)=> MClose.Contains(index)).ToList();

使用.Contains()仅过滤您在 MClose 中获得的索引。

关于c# - Linq 获取与条件匹配的索引列表以过滤另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48429078/

相关文章:

c# - MongoDB C# 驱动程序 : Using Linq to get Guid returns nothing

c# - Sitecore:使用 LINQ 与 ID 进行比较的有效方法

c# - 执行 POST 时无法将 HttpWebRequest 超时设置为高于 100 秒?

c# - 检查var是否为String类型

c# - 本地化文件无法有效地在 MVC ASP.NET Core 2.2 中呈现 Razor 页面

c# - 似乎无法将 Linq 与 ASP.Net 导航菜单一起使用

.net - 在 VB.NET 中使用 LINQ 的 ForEach 和匿名方法

c# - 在 C# EF 中,Where(o=>o.Equals(x)) 是否被视为客户端函数?

c# - 当我单击 GridView 项时返回 ImageView 实例

c# - 使用 itextsharp 从 PDF 中提取图像