2014-02-27 79 views
3

我發現很難解釋這個問題,但我認爲這是我們很多人遇到的常見問題。雖然價值與之前的價值相同,但是我們的價值爲

假設我有以下格式的List<string, string>

1, value- 
1, and value- 
1, again value- 
2, another value- 
2, yet another value- 

我想這個轉換成List<string>這將對只包含基於數2項

value-and value-again value- 
another value-yet another value 

這(1或2)。

我通常使用作品的代碼,但似乎有些什麼麻煩的。

有沒有更好的方法,可能與Linq?

快速控制檯應用程序來證明什麼,我試圖做這希望解釋它比我的問題更好!

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<Tuple<string, string>> myTuple = new List<Tuple<string, string>>(); 
     myTuple.Add(new Tuple<string, string>("1", "value-")); 
     myTuple.Add(new Tuple<string, string>("1", "and value-")); 
     myTuple.Add(new Tuple<string, string>("1", "again value-")); 
     myTuple.Add(new Tuple<string, string>("2", "another value-")); 
     myTuple.Add(new Tuple<string, string>("2", "yet another value")); 

     string previousValue = ""; 
     string concatString = ""; 
     List<string> result = new List<string>(); 
     foreach (var item in myTuple) 
     { 
      if (string.IsNullOrEmpty(previousValue)) 
       previousValue += item.Item1; 

      if (previousValue == item.Item1) 
       concatString += item.Item2; 
      else 
      { 
       result.Add(concatString); 
       concatString = ""; 
       previousValue = item.Item1; 
       concatString=item.Item2; 
      } 
     } 
     //add the last value 
     result.Add(concatString); 
    } 
+0

[通過LINQ集團]的可能重複(http://stackoverflow.com/questions/7325278/group-by-in-linq) – asawyer

回答

7
List<string> result = myTuple.GroupBy(t => t.Item1) 
        .Select(g => String.Join(" ", g.Select(tp=>tp.Item2))) 
        .ToList(); 
+1

完美,非常感謝你。 – Dave

+4

不,這將採取相同的項目,無論他們來的順序如何。 OP的代碼非常關注他們連續的順序。 – dasblinkenlight

+0

用'string.Empty'替換''「'來獲得預期的結果。 – Jay