gpt4 book ai didi

c# - 将二维数组拆分为包含新行的数组

转载 作者:行者123 更新时间:2023-11-30 17:36:03 29 4
gpt4 key购买 nike

我有带有下一个值的二维数组。

1 t\2 3
2 f\5 b
4 f\b\g 6 8\9

通过\拆分数组后我想接收

1 t 3
1 2 3
2 f b
2 5 b
4 f 6 8
4 f 6 9
4 b 6 8
4 b 6 9
4 g 6 8
4 g 6 9

我试过了,但没有成功:

var result = row.Table.AsEnumerable()
.Where(r => r == row)
.SelectMany(r => this.projectMapping.Select(pm => r[pm.OriginalName]
.ToString()
.Split(this.separator, StringSplitOptions.None)));

最佳答案

我有一个生成序列组合的扩展方法。此方法可用于获取您的结果。

首先,二维数组中的每个数组都必须自己转换为二维数组:

var array = new[]
{
new[] {"1", @"t\2", "3"},
new[] {"2", @"f\5", "b"},
new[] {"4", @"f\b\g", "6", @"8\9"},
};
var splitted = array.Select(a => a.Aggregate(new List<List<string>>(),
(seed, c) =>
{
seed.Add(c.Split(@"\".ToCharArray()).ToList());
return seed;
}));

现在 splitted 是一个二维数组序列,每个数组都必须合并。为了形象化,这个序列的第一个元素是:

[1], [t,2], [3]

使用的扩展方法有:

static class EnumerableExtensions
{
public static IEnumerable<IEnumerable<T>> Combine<T>(this IEnumerable<IEnumerable<T>> listOfLists)
{
IEnumerable<IEnumerable<T>> seed = new List<List<T>> { new List<T>() };
return listOfLists.Aggregate(seed, (r, list) =>
r.SelectMany(a => list.Select(x => a.Append(x))));
}

public static IEnumerable<T> Append<T>(this IEnumerable<T> list, params T[] elements)
{
return list == null ? elements : list.Concat(elements);
}
}

使用Combine方法,可以得到想要的结果

var result = splitted.SelectMany(s => s.Combine());

并将其可视化:

foreach (var element in result.Select(x => string.Join(", ", x)))
{
Console.WriteLine(element);
}

给予:

1, t, 3
1, 2, 3
2, f, b
2, 5, b
4, f, 6, 8
4, f, 6, 9
4, b, 6, 8
4, b, 6, 9
4, g, 6, 8
4, g, 6, 9

Combine 方法的思想是,对于每个进入它的序列,组合都是累积构建的。取第一个序列,[1], [t,2], [3],第一个聚合循环的结果是[1,t] [1,2]。这些中的每一个与 [3] 结合产生 [1,t,3][1,2,3]

关于c# - 将二维数组拆分为包含新行的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40292244/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com