我想要在最后一个负值之后的所有正整数值.
以下是Integer值列表:
List<int> lst = new List<int>();
lst.Add(1);
lst.Add(3);
lst.Add(5);
lst.Add(-3);
lst.Add(4);
lst.Add(-4);
lst.Add(5);
lst.Add(6);
Run Code Online (Sandbox Code Playgroud)
我试过
lst.Skip(lst.Max(0, lst.Count - 1)).ToList();
Run Code Online (Sandbox Code Playgroud)
预期产出
Last positive values after last negative value:
in example list last negative value is -4
and last positive values are 5, 6,
So I want 5 and 6 from given list
Run Code Online (Sandbox Code Playgroud)
Tim*_*ter 13
因为它是一个你可以使用的列表 FindLastIndex
int index = lst.FindLastIndex(i => i < 0); // it's value is lst[index]
IEnumerable<int> allPositiveAfterLastNegative = lst.Skip(index + 1);
Run Code Online (Sandbox Code Playgroud)
这也处理没有负值或者在开头或结尾的情况.
要获得上一次否定后的所有值,您可以执行此操作
var positivesAfterLastNegative = lst.Reverse().TakeWhile(x => x >= 0).Reverse().ToList()
Run Code Online (Sandbox Code Playgroud)
基本上,从结束开始直到它找到负数然后反转结果,以便它们以正确的顺序返回.
注意:我只建议使用列表或数组执行此操作.对于需要迭代才能达到目的的东西,它会有糟糕的表现.在这种情况下,您可以执行以下操作.
List<int> results = new List<int>();
foreach(var item in lst)
{
if(item < 0)
{
results.Clear();
}
else
{
results.Add(item);
}
}
Run Code Online (Sandbox Code Playgroud)
这将向列表添加非负值,直到它达到负值,然后它将清除列表,从而仅产生最后一个负值之后的值.
如果您更喜欢非Linq解决方案,那么您可以执行此操作
List<int> results = new List<int>();
for(int i = lst.Count - 1; i >= 0; i--)
{
if(lst[i] < 0)
{
break;
}
results.Insert(0,item);
}
Run Code Online (Sandbox Code Playgroud)
这里有一张班轮:
var result = list.Reverse().TakeWhile(x=> x > 0).Reverse().ToList();
Run Code Online (Sandbox Code Playgroud)