复制数组并将其存储在另一个数组中

时间:2015-05-09 20:22:23

标签: c# arrays

我有

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,但还有其他方法吗?

3 个答案:

答案 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}}的怪癖。然而,这个想法来自他。