2016-04-20 4 views
-2

Я думаю список списков, как этот.LINQ to Object базовые коды

var myList = new List<List<string>>(); 
    myList.Add(new List<string> { "#16", "100%", "Monitor" }); 
    myList.Add(new List<string> { "#19", "98%", "Guide" }); 
    myList.Add(new List<string> { "#77", "0%", "Cord" }); 

Из таких кодов.

string mySource = @" 
    #16 
    100% 
    Monitor 
    #19 
    98% 
    Guide 
    #77 
    0% 
    Cord 
    "; 
    var myPattern = @"#(\d+)\r\n(\d+)%\r\n([^\r\n]*)\r\n"; 
    var myCollection = Regex.Matches(mySource, myPattern, RegexOptions.Singleline) 
    .Cast<Match>() 
    .Select(x => Regex.Split(x.Value, "\r\n")) 
    .ToList(); 

Очевидно, что в середине «Матчи» он имеет массив.

Как я могу изменить его в список списков?

С уважением

ответ

1

Очевидно, что в середине "Спички" имеет массив.

Очевидно, что вы должны преобразовать его в список.

//.Select(x => Regex.Split(x.Value, "\r\n")) 
.Select(x => Regex.Split(x.Value, "\r\n").ToList()) 

var pattern = string.Join(@"\r\n", @"(?<id>#\d+)", @"(?<percent>\d+%)", @"(?<name>\w+)"); 
Regex.Matches(mySource, pattern, RegexOptions.Singleline) 
    .Cast<Match>() 
    .Select(m => new[] //or you can use : m => new List<string> 
    { 
     m.Groups["id"].Value, 
     m.Groups["percent"].Value, 
     m.Groups["name"].Value 
    }) 
    .ToList(); 
+0

Спасибо. Еще кое-что. Если бы я хотел бы получить список arrys. Я думаю, мне не нужно «Сплит». Я прав (это просто дикая догадка). – Jason

+0

Я имею в виду, есть ли способ использовать «Групповые подмаски» или что-то в этом роде? (Split снова делает массив. Это двойная обработка, я думаю ..) – Jason

+0

Для вашего первого вопроса вам все равно придется разделить их, поскольку каждое соответствие содержит строку с 3-мя линиями. Для вашего второго вопроса это вполне возможно. Дайте минутку, чтобы обновить его. – Xiaoy312

1

Просто используйте ToList метод расширения Array преобразовать в List

string mySource = @" 
#16 
100% 
Monitor 
#19 
98% 
Guide 
#77 
0% 
Cord 
"; 
var myPattern = @"#(\d+)\r\n(\d+)%\r\n([^\r\n]*)\r\n"; 
var myCollection = Regex.Matches(mySource, myPattern, RegexOptions.Singleline) 
.Cast<Match>() 
.Select(x => Regex.Split(x.Value, "\r\n").ToList()) 
.ToList(); 
+0

Nice один. Спасибо .. – Jason

+0

Без проблем, я рад, что это помогло :-) –

+0

Я немного изменяю коды. Я пробую список arry. И (мышление), используя уже сделанные подметки. С уважением – Jason

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