【问题标题】:Array.ConvertAll() and ToArray() method, which is better?Array.ConvertAll() 和 ToArray() 方法,哪个更好?
【发布时间】:2020-10-09 06:00:34
【问题描述】:

以下哪种方法更适合从控制台读取并将其存储到 Int 数组中?两者有什么区别吗?

int[][] s = new int[3][];
            for(int i=0; i<elements.Length;i++)
            {
                s[i] = Console.ReadLine().Split(' ').Select(x => int.Parse(x)).ToArray();
            }

int[][] s = new int[3][];

        for (int i = 0; i < 3; i++) {
            s[i] = Array.ConvertAll(Console.ReadLine().Split(' '), sTemp => Convert.ToInt32(sTemp));
        }

提前致谢!!!

【问题讨论】:

  • 如果他们给出相同的结果,那么两者都是好的。如果您有性能问题,您可以对其进行分析。顺便说一句,我建议使用 strcut Foo[] 的一维数组,而不是锯齿状数组 int[][]

标签: c# arrays type-conversion readline jagged-arrays


【解决方案1】:

首先,这些不等效,在一个版本中,您在另一个版本中使用 int.Parse(x) Convert.ToInt32(sTemp)

除此之外,你已经找到了一个完美的例子来说明如何做不止一种方式......在编程中你会发现很多。

ConvertAll()

将一种类型的数组转换为另一种类型的数组。

Select()

将序列的每个元素投影到一个新的形式中。

ToArray()

从 IEnumerable 创建一个数组。

从技术上讲,它们结合起来会产生相同的东西,但由于它们属于 BCL 的稍微不同的领域,而在稍微不同的领域中存在问题,因此它们的处理方式略有不同。

我个人认为ConvertAll 这些天使用得不多,因为人们非常熟悉 LINQ 并且喜欢链接方法。

至于哪个对性能更好,我们必须编写大量测试来解决这个问题,这将归结为每个平台每个数组大小的分配速度。但是,我觉得这种差异在日常生活中相对难以区分,而且我的猜测是,您将很难在任何显着的 sigma 上找到非常大的性能差异。

简而言之,使用喜欢的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多