我发现很难解释这个问题,但我认为这是我们很多人遇到的常见问题。
假设我有以下格式的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 :(得分:7)
List<string> result = myTuple.GroupBy(t => t.Item1)
.Select(g => String.Join(" ", g.Select(tp=>tp.Item2)))
.ToList();