2014-04-24 5 views
0

У меня есть список строк, и мне нужно выбрать определенные части списка, чтобы построить отдельную строку. У меня есть:Можно ли выбрать отдельные элементы из списка?

name,gender,haircolour,car; 
or 
John,Male,Brown,toyota; 

У меня также есть отдельный файл, указывающий, какие части и в каком порядке должна строиться новая строка.

например: Index = 0,3,1 распечатать John,toyota,Male или 1,2,0 распечатать Male,Brown,John.

Я попытался несколько методов, чтобы попытаться выбрать индекс элементов, которые я хочу, но все функции, возвращающие значения, возвращают только содержимое списка, и единственный возвращаемый результат, который дает целое число, равен Count(), что я могу Я считаю полезным.

Я пробовал и пытался, но все, что мне удалось сделать, все больше запутывает меня. Может ли кто-нибудь помочь предложить способ достичь этого?

+1

и что именно вы пробовали? Пожалуйста, разместите код. –

ответ

0

Вы должны быть в состоянии сделать список [я], где я есть индекс необходимого вам элемента. Здесь есть несколько примеров: http://www.dotnetperls.com/list

+0

спасибо за ссылку, я не думал, что вы можете использовать 'list [i]', я думал, что это было только для массивов :) – Ben

0

Если я понять вопрос правильно, что-то, как это должно сделать работу:

const string data = "John,Male,Brown,toyota"; 
const string order = "0,3,1"; 

string[] indexes = order.Split(','); 
string result = indexes.Aggregate("", (current, index) => current + data.Split(',')[int.Parse(index)] + ","); 
result = result.TrimEnd(','); 

Если строка данных заканчивается точкой с запятой ';', как, возможно, указанный в вашем вопросе, то изменить строку в этом :

string result = indexes.Aggregate("", (current, index) => current + data.Split(',')[int.Parse(index)].TrimEnd(';') + ","); 

Примечание. Это решение не проверяет, чтобы данный указатель существовал в данной строке данных. Для того, чтобы добавить проверку, чтобы убедиться, что индекс не выходит за границы массива, сделать что-то вроде этого, вместо:

string result = indexes.Where(z => int.Parse(z) < data.Split(',').Length).Aggregate("", (current, index) => current + data.Split(',')[int.Parse(index)].TrimEnd(';') + ","); 
0
 List<string> list = new List<string> { "John", "Male", "Brown", "toyota" }; 
     List<int> indexList = new List<int> { 0, 3, 1 }; 
     List<string> resultList = new List<string>(); 
     indexList.ForEach(i => resultList.Add(list[i])); 
Смежные вопросы