gpt4 book ai didi

c# - 如何从多个相似序列中选择最后一组串联序列

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:05 25 4
gpt4 key购买 nike

我有一个 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 实现此目的,也许是 SkipWhileGroupByAggregate

最佳答案

如果您可以使您的列表成为实际的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com