获取每个nth元素或最后一个元素



我用这个撞到了砖墙,我似乎无法将头缠绕在上面。

给定一个对象列表,我如何从末尾开始获得每个第三个元素(因此第三元到第六,第六至last等(第一个元素。

我本质上是在试图模拟从库存中绘制三张卡并在耐心游戏中检查有效的动作,但是由于某种原因,我正在为这个概念而苦苦挣扎。

编辑:

到目前为止,我已经尝试研究使用标准来增加步骤。这使我达到了第二个需求,即如果最终循环中的三个元素少于三个。

我已经在堆栈溢出上尝试了其他建议,以从列表中获取nth元素,但是它们也没有提供第二个要求。

不完全确定我可以发布哪种代码,这对于循环而言并不简单。因为我的问题是代码的逻辑,而不是代码本身。

例如:

给定列表1,2,3,4,5,6,7,8,9,10

我想获得一个清单8、5、2、1作为返回。

pseudocode:

List<object> filtered = new List<object>();
List<object> reversedList = myList.Reverse();
if(reversedList.Count % 3 != 0)
{
   return reversedList.Last();
}
else
{
   for(int i = 3; i < reversedList.Count; i = i +3)
{
   filterList.Add(reversedList[i]);
}
if(!filterList.Contains(reversedList.Last())
{
   filterList.Add(reversedList.Last());
}

尝试使用此代码 -

List<int> list = new List<int>();
List<int> resultList = new List<int>();
int count = 1;
for (;count<=20;count++) {
    list.Add(count);
}
for (count=list.Count-3;count>=0;count-=3)
{
    Debug.Log(list[count]);
    resultList.Add(list[count]);
}
if(list.Count % 3 > 0)
{
    Debug.Log(list[0]);
    resultList.Add(list[0]);
}

必须尝试使用linq进行。不确定它是否符合您的要求,但可以与您的示例一起使用。

        var list = Enumerable.Range(1, 10).ToList();
        //Start with reversing the order.
        var result = list.OrderByDescending(x => x)
            //Run a select overload with index so we can use position
            .Select((number, index) => new { number, index })
            //Only include items that are in the right intervals OR is the last item
            .Where(x => ((x.index + 1) % 3 == 0) || x.index == list.Count() - 1)
            //Select only the number to get rid of the index.
            .Select(x => x.number)
            .ToList();
        Assert.AreEqual(8, result[0]);
        Assert.AreEqual(5, result[1]);
        Assert.AreEqual(2, result[2]);
        Assert.AreEqual(1, result[3]);

相关内容

最新更新