我用这个碰到了一堵砖墙,我似乎无法绕过它。
给定一个对象列表,我如何从结尾开始获取每个第三个元素(所以从第三个到最后一个,从第六个到最后一个等)但是如果它到达结尾并且只剩下1或2个,则返回第一个元素。
我基本上试图模拟从股票中抽取三张牌并在耐心的游戏中检查有效的动作,但出于某种原因,我正在努力解决这一概念。
编辑:
到目前为止,我已尝试使用标准for循环增加步骤。这导致了第二个需要,即如果最后一个循环中少于三个,则获得第一个元素。
我已经尝试了关于堆栈溢出的其他建议,以便从列表中获取第n个元素,但是它们都没有提供第二个要求。
我不完全确定我发布的代码不会是一个简单的for循环。因为我的问题是代码的逻辑,而不是代码本身。
例如:
鉴于清单 1,2,3,4,5,6,7,8,9,10
我想获得一份清单 8,5,2,1 作为回报。
答案 0 :(得分:1)
伪代码:
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());
}
答案 1 :(得分:1)
尝试使用此代码 -
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]);
}
答案 2 :(得分:0)
不得不尝试用linq做。 不确定它是否符合您的要求,但适用于您的示例。
!