我有
string[] a = {"1","2","3","4","5"};
我想创建第二个数组并让它存储* 3数组a
。
所以第二个数组看起来像:
string[] b = {"1","2","3","4","5","1","2","3","4","5","1","2","3","4","5"};
我在考虑使用Array.Copy
,但还有其他方法吗?
答案 0 :(得分:6)
这是一个有趣的LINQ语句,可以获得所需的输出:
b = Enumerable.Range(0, 3).SelectMany(p => a).ToArray();
答案 1 :(得分:0)
下面的示例比使用Array.Copy更糟糕 - 它更像是在玩完成你所要求的方法。通过一个非常简单的string[] newArray = a.ArrayRepeat(3);
using System;
using System.Collections.Generic;
using System.Linq;
namespace ArrayRepeat
{
public static class ArrayHelper
{
public static IEnumerable<T> Repeater<T>(this T[] a, int reps)
{
for (int i = 0; i < reps; i++)
{
foreach (var item in a)
{
yield return item;
}
}
}
public static T[] ArrayRepeat<T>(this T[] a, int reps)
{
return a.Repeater<T>(reps).ToArray();
}
}
class Program
{
static void Main(string[] args)
{
string[] a = { "1", "2", "3", "4", "5" };
string[] newArray = a.ArrayRepeat(3);
var pressKeyToExit = Console.ReadKey();
}
}
}
答案 2 :(得分:0)
这是另一种不是hackish,看似干净,甚至可能有用的方法,虽然它仍然不会像Array.Copy那样表现得好:
using System;
using System.Linq;
namespace RepeatArray
{
class Program
{
static void Main(string[] args)
{
string[] a = { "1", "2", "3", "4", "5" };
string[] newArray = Enumerable.Repeat(a, 3).SelectMany(x => x).ToArray();
var pressKeyToExit = Console.ReadKey();
}
}
}
我应该给@cmcquillan道具。我试图弄清楚如何绕过他遗忘SelectMany(p => x)
的{{1}}的怪癖。然而,这个想法来自他。