2016-04-20 22 views
-2

我在想這樣一個列表的列表。LINQ到對象基本代碼

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

我的意思是,有什麼方法可以使用「組子匹配」或什麼? (分體式再次做出一個數組。這是雙重處理,我想..) – Jason

+0

關於第一個問題,你仍然有作爲每場比賽包含3lines一個字符串分割。對於你的第二個問題,這是完全可能的。給我一分鐘來更新它。 – 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

尼斯之一。謝謝.. – Jason

+0

沒問題,我很高興它幫助:-) –

+0

我修改代碼一點。我正在嘗試一份列表。並(思考)使用已經完成的子匹配。 Regards – Jason