展平可能包含数组的对象数组

2024-05-26

我有一个IEnumerable<object>其中可能包含也可能不包含一些嵌套集合。例如,我的出发点可能是这样的:

[ "foo", 2, [1, 2, 3, 4], "bar" ]

我想将其压平为:

[ "foo", 2, 1, 2, 3, 4, "bar" ]

我在想一个SelectMany应该在这里工作,但无法找到正确的组合。我可以暴力破解它,但我认为应该有一个更优雅的解决方案。


IEnumerable<object> source = new object[] { "test", 1, new[] { 1, 2, 3 }, "test" };

var result = source .SelectMany(x => x is Array ? ((IEnumerable)x).Cast<object>() : Enumerable.Repeat(x, 1));

要使其与嵌套数组一起使用,请使 lambda 递归:

IEnumerable<object> source = new object[] { "test", 1, new object[] { 1, 2, new [] { "nested", "nested2" } }, "test" };

Func<IEnumerable<object>, IEnumerable<object>> flatten = null;
flatten = s => s.SelectMany(x => x is Array ? flatten(((IEnumerable)x).Cast<object>()) : Enumerable.Repeat(x, 1));

var result = flatten(source);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

展平可能包含数组的对象数组 的相关文章

随机推荐