我有一个 int 数组,它是多个相似数组的串联数组,所有数组都从 1 开始。
1、2、3、4
1, 2
1, 2, 3
一、二
int[] list = { 1, 2, 3, 4, 1, 2, 1, 2, 3, 1, 2 };
我想要实现的是获得结果的“最后一组”,即 {1, 2}。
尝试:
int[] list = { 1, 2, 3, 4, 1, 2, 1, 2, 3, 1, 2 };
List<int> lastSet = new List<int>();
var totalSets = list.Count(x => x == 1);
int encounter = 0;
foreach (var i in list)
{
if (i == 1)
encounter += 1;
if (encounter == totalSets)
lastSet.Add(i);
}
lastSet.ToList().ForEach(x => Console.WriteLine(x));
是否有更好的方法使用 LINQ 实现此目的,也许是 SkipWhile
、GroupBy
、Aggregate
?
最佳答案
如果您可以使您的列表成为实际的 List<int>
或者如果您不介意通过 .ToList()
创建列表的副本,你可以这样做:
var list = new[]{ 1, 2, 3, 4, 1, 2, 1, 2, 3, 1, 2 }.ToList();
var lastSet = list.Skip(list.LastIndexOf(1)).ToList();
否则,Aggregate
可以工作,但有点难看:
var lastSet = list.Aggregate(new List<int>{1}, (seed, i) => {
if(i == 1) {seed.Clear(); }
seed.Add(i);
return seed;
})
更新
正如 dtb 指出的那样,您可以使用 Array.LastIndexOf 而不是创建列表:
var list = new[]{ 1, 2, 3, 4, 1, 2, 1, 2, 3, 1, 2 };
var lastSet = list.Skip(Array.LastIndexOf(list, 1)).ToList();
关于c# - 如何从多个相似序列中选择最后一组串联序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10544758/