2012-11-04 7 views
0

TheListOfMyObjects이라는 개체 목록이 있다고 가정합니다. 그 목록에는 값이 일치하는 속성을 가진 객체가 있습니다 : MyObject.TheProperty = SomeValue.목록에서 요소 인덱스 가져 오기

어떻게이 목록에서 이전 3 개 개체와 다음 3 개 개체를 가져올 수 있습니까?

SomeValue과 일치하는 개체가 첫 번째 위치에 있으면 3 개의 개체가 2-5 위치에 있고 3 개의 개체가 마지막 3 개 위치에 있어야 총 6 개의 개체가 생성됩니다.

의견을 보내 주셔서 감사합니다.

+1

(http://whathaveyoutried.com)? – Oded

+0

나는 모든 요소를 ​​foreach 루프가있는 배열로 푸시하여 배열로 변환하려고 시도했다. 이제 색인이있는 배열이 있지만 linq 기반의 접근 방식이 더 짧은지 궁금합니다. – frenchie

+0

'IList '을 사용하고 있다면 이미 인덱스로 액세스 할 수 있습니다. LINQ를 사용하면 'Take'를 사용하여 이것을 볼 수 있습니다 (초기 색인이있는 경우). 그러나 당신은 목록 변수의 유형이나 LINQ 구현을 언급하지 않았습니다. – Oded

답변

3

이 시도 : 경우

var theObj = TheListOfMyObjects.First(x => x.TheProperty == someValue); 
var index = TheListOfMyObjects.IndexOf(theObj); 
//and from there it's obvious. 

목록은 이러한 요소를 포함 FirstOrDefault를 사용하고 theObj에 널 (null)을 확인하지 않습니다 기회가있다.

+1

개체가 (기본값) 참조 동등성을 사용하는 경우에만 유효하다는 점에 유의하십시오. 그렇지 않으면 부정 및 긍정적 인 놀라움으로 이어질 수 있습니다. IEQuatable 참조. sehe

+1

감사합니다. 이것은 저에게 아이디어를주었습니다 : 동일한 기존 목록에 또 다른 목록을 추가하면 그 값이 목록의 처음이나 끝에있는 경우를 처리 할 필요가 없습니다. – frenchie

1

늦게 답변 해 주셔서 죄송합니다. 컴퓨터에 문제가있었습니다. 당신은 당신이 당신의 목록에서 최소 7 개체가있는 경우이 같은 뭔가 가장자리 케이스를 해결할 수있는 또 다른 목록을 추가 할 필요가 없습니다 :

[당신이 시도 무엇]
  MyObject mo = list.FirstOrDefault(x => x.TheProperty.Equals(SomeValue)); 
      if(mo != null) 
      { 
       int index = list.IndexOf(mo); 
       MyObject moMinus3 = list[(index - 3 + list.Count) % list.Count]; 
       MyObject moMinus2 = list[(index - 2 + list.Count) % list.Count]; 
       MyObject moMinus1 = list[(index - 1 + list.Count) % list.Count]; 
       MyObject mo0 = list[index]; 
       MyObject moPlus1 = list[(index + 1 + list.Count) % list.Count]; 
       MyObject moPlus2 = list[(index + 2 + list.Count) % list.Count]; 
       MyObject moPlus3 = list[(index + 3 + list.Count) % list.Count]; 
      } 
관련 문제