2014-08-05 2 views
0

У меня есть строка, как это, который является динамичным и может быть любой длины от 1 до 1000 частей в формате ид^части ~:LINQ из массива строк

string Parts = "1^PartOne~2^PartTwo~3^Part3~4^PartFour" 

Можно ли преобразовать это в iList строк, таких как LINQ?

PartOne 
PartTwo 
PartThree 
PartFour 

или мне просто нужно разделить два раза и добавить их в список вручную?

+2

Что ты попробовать себя? –

ответ

4

Почему бы не использовать обычный string.Split и Select?

var list = Parts.Split('~').Select(x => x.Split('^')[1]); 

Вы можете сделать .ToList(), чтобы сделать это в конце концов IList, как просили.

Она разделяет различные элементы (1^PartOne), а затем разбивает их снова, чтобы взять последнюю часть (PartOne)

+1

Ничего плохого в этом, насколько я могу судить. +1 – DGibbs

+0

Спасибо. Начал сомневаться. –

3

Лично я бы предпочел Dictionary<string, string> над List<string>, так как вы можете представить, как ключ и значение:

string parts = "1^PartOne~2^PartTwo~3^Part3~4^PartFour"; 

var dict = parts.Split(new[] { '~' }, StringSplitOptions.RemoveEmptyEntries) 
       .Select(part => part.Split('^')) 
       .ToDictionary(split => split[0], split => split[1]); 
+1

Downvoter хочет прокомментировать? – DGibbs

1

Вот еще один метод:

int n = 0; 
var result = Parts 
    .Split(new char[] {'^','~'}, StringSplitOptions.None) 
    .Where(x => !int.TryParse(x,out n)); 

Поскольку это обычный след uence формы «number^text ~», мы используем Split, чтобы разделить специальные символы и отфильтровать чисто числовые части, чтобы получить требуемый текст.

Demo

-1

Вы можете использовать этот код. Он работает как ваше требование. Должен попробовать.

C# Код:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Singh 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string Parts = "1^PartOne~2^PartTwo~3^PartThree~4^PartFour"; 
      string[] data = new string[5]; 
      data = Parts.Split('^', '~'); 


      for (int i = 0; i < data.Count(); i++) 
      { 
       i++; 
       string names = data[i]; 
       Console.WriteLine(names.ToString()); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

Результат:

enter image description here

Смежные вопросы