gpt4 book ai didi

c# - 应用 "Join"方法的最佳方法通常类似于 String.Join(...) 的工作方式?

转载 作者:行者123 更新时间:2023-11-30 13:46:48 24 4
gpt4 key购买 nike

如果我有一个字符串数组,例如:var array = new[] { "the", "cat", "in", "the", "hat"},我想用每个单词之间的空格加入它们,我可以简单地调用 String.Join("", array)

但是,假设我有一个整数数组(就像我可以有一个字符数组一样)。我想将它们组合成一个大数组(展平它们),但同时在每个数组之间插入一个值。

var arrays = new[] { new[] { 1, 2, 3 }, new[] { 4, 5, 6 }, new { 7, 8, 9 }};

var result = SomeJoin(0, arrays); // result = { 1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9 }

我写了一些东西,但它非常难看,我相信有更好、更简洁的方法。也许更有效?

var result = new int[arrays.Sum(a => a.Length) + arrays.Length - 1];

int offset = 0;
foreach (var array in arrays)
{
Buffer.BlockCopy(array, 0, result, offset, b.Length);
offset += array.Length;

if (offset < result.Length)
{
result[offset++] = 0;
}
}

也许这是最有效的?我不知道...只是看看是否有更好的方法。我想也许 LINQ 可以解决这个问题,但遗憾的是我没有看到我需要的任何东西。

最佳答案

您通常可以通过以下方式“加入”序列:

public static IEnumerable<T> Join<T>(T separator, IEnumerable<IEnumerable<T>> items)
{
var sep = new[] {item};
var first = items.FirstOrDefault();
if (first == null)
return Enumerable.Empty<T>();
else
return first.Concat(items.Skip(1).SelectMany(i => sep.Concat(i)));
}

这适用于您的代码:

var arrays = new[] { new[] { 1, 2, 3 }, new[] { 4, 5, 6 }, new { 7, 8, 9 }};
var result = Join(0, arrays); // result = { 1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9 }

这里的优点是这将适用于任何 IEnumerable<IEnumerable<T>> , 并且不限于列表或数组。请注意,这将在两个空序列之间插入一个分隔符,但如果需要,可以修改该行为。

关于c# - 应用 "Join"方法的最佳方法通常类似于 String.Join(...) 的工作方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19601143/

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