Я ищу простой LINQ, чтобы решить эту проблему:C# LINQ, чтобы объединить многомерную массив строк
//Input
string[,] arr = new string[,]
{
{"AA:10/BB:20/CC:30","AA:10/BB:20/CC:30","A:10/BB:20/CC:30"},
{"AA:10/BB:20/CC:30/DD:40","AA:10/BB:20/CC:30","A:10/BB:20/CC:30"},
{"AA:10/BB:20/CC:30","AA:10/BB:20/CC:30","A:10/BB:20/CC:30"},
};
//Expected output
string[] res = new string[]
{
"AA:30/BB:60/CC:90/DD:40","AA:30/BB:60/CC:90","BF:30/INF:30"
};
Моего попробовали решение.
// input
string[] breakups = new string[]
{
"YQ:50/BF:50/YR:50",
"YQ:50/SR:50",
"YQ:50/BF:50/YR:50",
"XX:10"
};
//code
string test = string.Join("/", breakups
.SelectMany(m => m.Split('/'))
.Select(x => x.Split(':'))
.GroupBy(m => m[0])
.Select(m => string.Format("{0}:{1}", m.Key, m.Sum(g => double.Parse(g[1])))));
//Output
string[] res = new string[]
{
"YQ:150/BF:100/YR:100/SR:50/XX:10"
};
Но я терпеть неудачу, если ввод многомерен. Пожалуйста, руководство мне решить эту
я получил ответ, как мне нравится
int columnCount = (arr.Split('@').ToArray()).Select(eac => eac.Split('|')).ToArray()[0].Length;
var rowList = string.Join("|", from res in (arr.Split('@').ToArray()).Select(eac => eac.Split('|')).ToArray().SelectMany(x => x).Select((x, i) => new { V = x, Index = i }).
GroupBy(x => (x.Index + 1) % columnCount).Select(g => g.Select(x => x.V).ToList()).ToList()
select string.Join("/", res
.SelectMany(m => m.Split('/'))
.Select(x => x.Split(':'))
.GroupBy(m => m[0])
.Select(m => string.Format("{0}:{1}", m.Key, m.Sum(g => double.Parse(g[1]))))));
возможно дубликат [C# LINQ, чтобы объединить два ломку] (http://stackoverflow.com/questions/27859157/c-sharp-linq-to-merge-two-breakup) –
Dude вы уже спросили и получил ваши ответы. Голосование закрывается как дубликат. Это можно и будет считать спамом. –
Если вам нужны многомерные массивы, используйте вместо LINQ циклы. –