按值排序列表索引

时间:2014-06-30 14:57:25

标签: c# list sorting indexing

我在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的新手。谢谢!

编辑:正如你们中的一些人已经正确指出的那样,我实际上并不想排序列表,我只想过滤它。谢谢!

5 个答案:

答案 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);

SelectWhere有许多变体,其中包含符合条件的项目索引 - 如果您可以更清楚地知道自己想要什么那么您将会得到更好的例子。

答案 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();