【问题标题】:copy an array from x to y not x to array.length将数组从 x 复制到 y 而不是 x 到 array.length
【发布时间】:2012-12-23 13:22:09
【问题描述】:

我尝试过以这样的方式复制数组,我可以用线程处理数组中的数据,但显然没有将数组拆分成更小的块(比如说 1 个数组 -> 4 个四分之一(4 个数组))。

我可以从指定的(int)起点找到副本并从头到尾复制所有前导数据的唯一方法,如果我使用多个线程来处理数据,它会使线程点无效。

这是显示我想要做什么的伪代码。

int array { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }
int split1 { 0, 1, 2, 3 }
int split2 { 4, 5, 6, 7 }
int split3 { 8, 9, 10, 11 }
int split4 { 12, 13, 14, 15 }

或者说数组的长度不能平均分割

int array { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }
int split1 { 0, 1, 2, 3 }
int split2 { 4, 5, 6, 7 }
int split3 { 8, 9, 10, 11 }
int split4 { 12, 13, 14, 15, 16}

【问题讨论】:

    标签: c# arrays split


    【解决方案1】:

    我可以从指定的(int)起点找到副本并从头到尾复制所有前导数据的唯一方法,如果我使用多个线程来处理数据,它会使线程点无效。

    很遗憾你没有展示那是哪种方法。 Array.Copy 具有各种重载,用于将数组的 part 复制到另一个数组。 This one 可能是最有帮助的:

    public static void Copy(
        Array sourceArray,
        int sourceIndex,
        Array destinationArray,
        int destinationIndex,
        int length
    )
    

    另外,查看Buffer.BlockCopy,它具有基本相同的签名 - 但值都是根据 字节 而不是数组索引。它也只适用于基元数组。

    另一种选择是根本不创建数组的副本——如果每个线程都知道它应该使用数组的哪个段,它就可以直接访问它。您还应该研究 Parallel.ForEach(和类似方法)作为在更高级别轻松并行化操作的一种方式。

    【讨论】:

    • 啊这就是我出错的地方我使用 variable.copyTo() 而不是 Array.Copy() 谢谢
    猜你喜欢
    • 2012-08-08
    • 2017-12-30
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多