繁体   English   中英

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

[英]replicating an array and storing it in another array

我有

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 ,但是还有另一种方法吗?

这是一个有趣的LINQ语句,该语句可获取所需的输出:

b = Enumerable.Range(0, 3).SelectMany(p => a).ToArray();

下面的示例比使用Array.Copy的效果要差-它只是在完成您所要求的方法。 通过非常简单的string[] newArray = a.ArrayRepeat(3);调用即可获得最终结果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();
        }
    }
}

这是另一种方法,虽然它的性能仍然不如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)的古怪之处,后者只是丢弃p 但是,这个想法来自他。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM