2017-05-05 1 views
-1

가져 오기를 난 그냥 주위에 내 머리를 정리하고 수없는 것.나는이와 벽돌 벽을 치는거야 매 n 번째 요소 나 마지막

주어진 개체 목록에서 세 번째 요소는 끝에서 시작하여 (세 번째 요소부터 마지막 ​​요소, 여섯 번째 요소까지 등등) 모든 요소를 ​​가져올 수 있지만 끝점에 도달하면 1 ~ 2 개의 요소 만 반환됩니다. 첫 번째 요소.

나는 기본적으로 주식에서 3 장의 카드를 그림과 인내의 게임에서 유효한 이동 검사 시뮬레이션하기 위해 노력하고있어,하지만 어떤 이유로 나는이 하나 개의 개념과 사투를 벌인거야.

는 편집 :

은 지금까지 해봤이 단계를 증가 루프에 대한 표준을 사용으로 보았다. 결국 마지막 루프에서 3 개 미만인 경우 첫 번째 요소를 가져 오는 두 번째 필요성이 생깁니다.

나는 그러나 그들 모두는 두 번째 요구 사항을 제공하지 않습니다, 목록에서 n 번째 요소를 얻기 위해 스택 오버 플로우에 다른 제안을 시도했습니다. 내가 루프에 대한 간단한하지 않다고을 게시 할 수있는 어떤 코드

완전히 확실하지. 내 문제는 코드 자체가 아닌 코드에 대한 논리이기 때문입니다.

1,2,3,4,5,6,7,8,9,10

내가 8 목록을 얻을하고 싶은 목록을 감안할 때

, 5 : 예를 들어

, 2, 1 을 반환합니다.

+0

코드 보여? – MickyD

+0

아무 것도 시도해 보셨습니까? 방금 프로세스라고 생각해도 지금까지 가지고있는 것을 보여주십시오. – Kroltan

+0

나는이 코드를 필요로하지 않을 것이라고 기대했지만 꽤 빠를 것이라고 생각했다. 나는이 것을 위해 지금까지 시도한 것을 추가 할 것이다. – Ben

답변

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()); 
} 
+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 내 말씨가 여전히 내 게시물에 약간의 작업이 필요합니다 같아요. 그 두 가지 모두 일어나길 바래요. 그래서 for 루프가 끝날 때까지 루프를 반복하지만, 세 번째 요소가 없으면 첫 번째 요소를 가져옵니다 (우리가 뒤로 가기 때문에 기술적으로 첫 번째 요소가됩니다). 내 게시물을 조금 업데이트 할게. – Ben

+0

그래서 모든 3 번째 아이템을 얻고 마지막 아이템을 3으로 나눌 수 없다면? 3보다 작 으면 마지막 만 반환하십시오. –

+0

네, 맞습니다. 난 내가 업데이트를 확인, 조금 – Ben

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]); 
} 
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]); 
관련 문제