2011-09-18 2 views
2

질문하기가 어렵 기 때문에 내 제목 질문이 약간 애매합니다. 그러나 내 상황은 다음과 같습니다.linq을 사용하여 인덱스 배열에서 객체 컬렉션으로 이동할 수 있습니까?

나는 개별 배열 개체에 대한 인덱스 인 int 배열을 가지고 있습니다.

배열은 다음과 같다 :이 지표

int[] indices = { 0, 2, 4, 9, 10, 11, 13, /* more (non-)sequential indices */ }; 

각 I 가진 집합에서 그 인덱스 객체에 대응한다.

내 배열의 인덱스를 사용하여 이러한 개체의 새 컬렉션을 만들 수 있기를 원합니다.

일부 LINQ 기능을 사용하면 어떻게됩니까?

답변

5
int[] indices = { 0, 2, 4, 9, 10, 11, 13 }; 
string[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q" }; 

IEnumerable<string> results = indices.Select(s => strings[s]); 

// or List<string> results = indices.Select(s => strings[s]).ToList(); 

foreach (string result in results) // display results 
{ 
    Console.WriteLine(result); 
} 

물론 문자열 등을 개체 모음으로 변경하십시오. 이 같은

+0

덕분에,이 완벽하게 작동! –

4

뭔가 작업을해야합니다 :

List<int> items = Enumerable.Range(1,100).ToList(); 
int[] indices = { 0, 2, 4, 9, 10, 11, 13, /* more (non-)sequential indices */ }; 
var selectedItems = indices.Select(x => items[x]).ToList(); 

을 기본적으로 각 인덱스에 대해 당신이 인덱서를 사용하여 (해당 항목이 어떤 유형) 당신의 items 컬렉션의 해당 항목에 투사되는 인덱스의 컬렉션에.

대상 컬렉션 인 경우 당신보다 IEnumerable<SomeType>는 다른 방법 대신 인덱서의 ElementAt()를 사용할 수 있습니다

var selectedItems = indices.Select(x => items.ElementAt(x)).ToList(); 
+0

응답 해 주셔서 감사합니다. 나는 여러 답변을 받아 들일 수 있으면 좋겠다. 때로는 매 작업마다 대답을 받아 들일 수 없다고 생각한다. :( –

관련 문제