2011-09-18 4 views
2

私のタイトルの質問は尋ねるのが難しいので少し曖昧ですが、私の状況はこれです:linqを使用してインデックスの配列からオブジェクトのコレクションに移動するにはどうすればよいですか?

私は、オブジェクトの別々のコレクションへのインデックスの配列を持っています。

配列は次のようになります。

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

これらの指標のそれぞれは、私が持っているコレクション内のそのインデックスのオブジェクトに対応します。

私の配列のインデックスを使って、これらのオブジェクトの新しいコレクションを構築したいと考えています。

いくつかの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

お返事ありがとうございます。私は複数の回答を受け入れることができたらいいと思っています。 :( –

関連する問題