2014-02-10 4 views
0

Я пытаюсь получить доступ к элементам в одномерных «данных» массив (строки или двойные) через другой массив, содержащие индексы Я хочу, чтобы извлечь:Доступ одномерных элементы массива с индексом массивом

string[] myWords = {"foo", "overflow", "bar", "stack"}; 
int[] indices = {3, 1}; 

string[] someWords = myWords[indices]; // Extract entries number three and one. 

Последней строке отказался компилятор. То, что я хотел бы видеть, - someWords == {"stack", "overflow"}.

Насколько я знаю, это работает в Matlab и Fortran, так есть ли хороший и элегантный способ сделать это для массивов на C#? Списки тоже прекрасны.

Array.GetValue(int[]) как в this question не работает в моем случае, так как этот метод для многомерных массивов only.`

+0

Это похоже на синтаксис, который будет работать на языке из другой парадигмы. В C# операции массива гораздо более ручные; ответ LINQ (библиотека выполняет задание), или вы можете реализовать его явно как цикл над значениями в «индексах» с массивом, созданным вручную, содержащим результаты. – Shibumi

+1

Конечно, я мог бы сделать это вручную, но я специально искал элегантный лайнер. – cuneus

+0

Я не уверен, что «элегантный однострочный» не является оксюмороном **:) **. – Shibumi

ответ

4

если вы можете использовать LINQ, вот так:

string[] someWords = indices.Select(index => myWords[index]).ToArray(); 
+0

Спасибо, это похоже на то, что я искал! Попробуй, как только я вернусь к коду. – cuneus

1

Не уверен, что это это то, о чем вы просите.

string[] myWords = {"foo", "overflow", "bar", "stack"}; 
int[] indices = {3, 1}; 
string[] someWords = indices.Select(x=> myWords[x]).ToArray(); 
Смежные вопросы