多次引用数组中的元素并将该元素分配给变量[重复]

Posted

技术标签:

【中文标题】多次引用数组中的元素并将该元素分配给变量[重复]【英文标题】:Multiple refrences to an element in an array vs assigning that element to a variable [duplicate] 【发布时间】:2019-12-18 08:09:58 【问题描述】:

如果我对数组中的同一个元素进行多次引用,在性能方面,将那个元素分配给一个变量并改为引用这个变量会更好吗?我知道这会使代码更具可读性,而且通常更重要,但要严格查看代码的性能——哪种方式更好?

public Class Example

    public void ExampleOne()
    
        //Assuming the values in the array are random.
        int[,] arr = new int[10,10];
        for (int i = 0; i < 10; i++)
        
            for (int j = 0; j < 10; j++)
            
                if(arr[i, j] < 5 || (arr[i, j] > 10 && arr[i, j] < 20)) 
                
                    arr[i, j] = 0;
                
                else
                
                    arr[i, j] = 1;
                
            
        
    

    public void ExampleTwo()
    
        //Assuming the values in the array are random.
        int[,] arr = new int[10,10];
        int val;
        for (int i = 0; i < 10; i++)
        
            for (int j = 0; j < 10; j++)
            
                val = arr[i, j];
                if(val < 5 || (val > 10 && val < 20)) 
                
                    arr[i, j] = 0;
                
                else
                
                    arr[i, j] = 1;
                
            
        
    

【问题讨论】:

【参考方案1】:

我已经对您使用不同大小的数组的两种方法进行了基准测试,并且....如果数组的元素小于 640000 左右,那么第二个是最快的。否则,如果元素超过 640000 左右,则速度更快的是第一个。


static void ExampleOne()
        
            Stopwatch stopwatch = Stopwatch.StartNew();

            //Assuming the values in the array are random.
            int[,] arr = new int[10, 10];
            for (int i = 0; i < 10; i++)
            
                for (int j = 0; j < 10; j++)
                
                    if (arr[i, j] < 5 || (arr[i, j] > 10 && arr[i, j] < 20))
                    
                        arr[i, j] = 0;
                    
                    else
                    
                        arr[i, j] = 1;
                    
                
            

            Console.WriteLine(stopwatch.ElapsedTicks);
            stopwatch.Stop();
        

        static void ExampleTwo()
        
            Stopwatch stopwatch = Stopwatch.StartNew();

            //Assuming the values in the array are random.
            int[,] arr = new int[10, 10];
            int val;
            for (int i = 0; i < 10; i++)
            
                for (int j = 0; j < 10; j++)
                
                    val = arr[i, j];
                    if (val < 5 || (val > 10 && val < 20))
                    
                        arr[i, j] = 0;
                    
                    else
                    
                        arr[i, j] = 1;
                    
                
            

            Console.WriteLine(stopwatch.ElapsedTicks);
            stopwatch.Stop();
        

【讨论】:

很遗憾,我无法重现您的结果。我尝试对不同大小的数组进行测试以获得更好的平均值。对我来说,这两种方法花费的时间大致相同(27 因子似乎有点高),但它们并不一致。对于一个 1000x1000 的数组,它需要 300000 到 400000 个滴答声,有时一种方法比另一种更好,有时则相反。

以上是关于多次引用数组中的元素并将该元素分配给变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

java基础-数组

基于数字使用 ngFor 多次重复 HTML 元素

基于数字使用 ngFor 多次重复 HTML 元素

在 C++ 中,当一个数组的元素在循环中多次使用时,将其分配给另一个元素会更好吗?

数据结构之数组

如何修改数组中一个元素的值