我在C#中有一个列表
List<int> temp = new List<int>(0, 1, 2, 3, 4, 2, 8);
我想在temp
中列出满足bool表达式的项目列表,例如
List<int> results = temp.Sort(x > 2);
但是.Sort()并不存在。结果列表results
将包含
(3, 4, 6)
原始列表temp
中大于2的值的 索引 是哪个。
很抱歉,如果这是微不足道的或之前被问过的话;我是编码和SO的新手。谢谢!
编辑:正如你们中的一些人已经正确指出的那样,我实际上并不想排序列表,我只想过滤它。谢谢!答案 0 :(得分:4)
从输出中可以看出您需要指数
List<int> temp = new List<int>{0, 1, 2, 3, 4, 2, 8};
var newList = temp.Select((r, i) => new { Index = i, Value = r })
.Where(r => r.Value > 2) //For your condition
.OrderBy(r => r.Value)
.Select(r => r.Index) //For output
.ToList();
这会返回(3, 4, 6)
编辑:由于问题已被编辑并指出不需要根据值对列表进行排序,因此可以省略上述语句中的OrderBy
。
var newList = temp.Select((r, i) => new { Index = i, Value = r })
.Where(r => r.Value > 2) //For your condition
.Select(r => r.Index) //For output
.ToList();
答案 1 :(得分:2)
一个简单,快速且易于理解的解决方案是:
for (int i = 0; i < temp.Count; i++)
if(temp[i] > 2) results.Add(i);
答案 2 :(得分:0)
我想在temp中创建一个满足bool表达式的项目列表,
那将是Where
:
List<int> temp = new List<int>(0, 1, 2, 3, 4, 2, 8);
List<int> results = temp.Where(x => x > 2);
Select
和Where
有许多变体,其中包含符合条件的项目索引 - 如果您可以更清楚地知道自己想要什么那么您将会得到更好的例子。
答案 3 :(得分:0)
你可以尝试这个:
List<int> results = temp.Select((x, index) => new { Index = index, Number = x })
.Where(x=>x.Number > 2)
.Select(x=>x.Index);
答案 4 :(得分:0)
您需要在应用where子句之前保留索引存储,否则它将丢失。
List<int> temp = new List<int>{ 0, 1, 2, 3, 4, 2, 8 };
List<int> results = temp.Select((x,i) => new { Value = x, Index = i })
.Where(x => x.Value > 2)
.Select(x => x.Index)
.ToList();