为什么通过引用而不是通过值传递? - c#

我想做的是将玩家列表的名称和分数转储到临时数组中以进行排序,以便它们可以显示在记分板上。

由于某种原因,它似乎保留了对值的引用,而不是对值本身的引用。排序后,记分板的每个条目均显示“玩家4-得分4”。我知道排序方法有效,我之前在其他游戏中使用过。

初始值为
玩家1-1
玩家2-2
玩家3-3
玩家4-4

缺少的一件事是每次更新都将分数转储到分数列表中。我在尝试重新排列使其工作后将其取出。

请帮助我了解为什么会这样。我在这里阅读了这篇文章,并没有太大帮助。 http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx

初始化

  ScoresList = DumpListToArray(PlayerManager.PlayerList);

更新资料

SortKillScores(ScoresList);

private static void DrawKillScores(SpriteBatch spriteBatch)
    {
        for (int i = 0; i < 4; i++)
        {
            spriteBatch.DrawString(font, "" + ScoresList[i].Name + " - " + ScoresList[i].KillScore, new Vector2(900, 0 + 20 * i), Color.White, 0f, Vector2.Zero, 0.5f, SpriteEffects.None, 1f);  
        }

    }

方法

private static ScoreHolder[] DumpListToArray(List<Player> tempList)
    {
        ScoreHolder[] tempArray = new ScoreHolder[4];

        for (int i = 0; i < 4; i++)
        {
            tempArray[i] = new ScoreHolder();
            tempArray[i].Name = tempList[i].PlayerName;
            tempArray[i].KillScore = tempList[i].KillScore;
            tempArray[i].TimeScore = tempList[i].TimeScore;
            tempArray[i].PointScore = tempList[i].PointScore;
        }

        return tempArray;
    }

    private static void SortKillScores(ScoreHolder[] array)
    {
        for (int i = 0; i < array.Length; i++)
        {
            for (int k = i; k > 0 && array[k].KillScore > array[k - 1].KillScore; k--)
            {
                int score = array[k].KillScore;
                string name = array[k].Name;
                array[k] = array[k - 1];
                array[k - 1].KillScore = score;
                array[k - 1].Name = name;
            }
        }       
    }

参考方案

与其尝试将属性从一个单元复制到另一个单元,不如交换它们:

private static void SortKillScores(ScoreHolder[] array)
{
    for (int i = 0; i < array.Length; i++)
    {
        for (int k = i; k > 0 && array[k].KillScore > array[k - 1].KillScore; k--)
        {
            var temp = array[k];
            array[k] = array[k - 1];
            array[k - 1] = temp;
        }
    }       
}

您所要做的就是将对同一项目的引用复制到array[k],然后在k-1中编辑与该项目相同的项目!

int score = array[k].KillScore;
string name = array[k].Name;
array[k] = array[k - 1];          // cells k and k-1 are the same item!
array[k - 1].KillScore = score;   // this changes both k and k-1
array[k - 1].Name = name;         // and so does this!

图像作为Int Array Java - java

我在用Java编写的网络摄像头应用程序中使用JMyron,该程序返回了网络摄像头视为int []的内容。由于每个int一个像素,它如何将像素的rgb值表示为一个int? 参考方案 一个int是32位。所以int的前8位是红色0-255,后8位是绿色0-255,后8位是蓝色0-255,后8位是alpha值0-255。这就是为什么它称为32位颜色。当我第一次连接…

array_udiff返回不同的结果 - php

我有这段代码来获取两个对象数组之间的区别:$diff = array_udiff($a, $b, function($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; } ); $ a是[ { "id": "7", "attribute":…

LeetCode题解912.sort-an-array

题目地址 https://leetcode.com/problems/sort-an-array/ 题目描述 Given an array of integers nums, sort the array in ascending order. Example 1: Input: [5,2,3,1] Output: [1,2,3,5] Example 2: …

PHP返回或参考? - php

我有几个函数可以处理数组中的数据,例如unset_data(),您可以向其传递值和无限数量的字符串参数,例如:unset_data( $my_array, "firstname", "password" ); 它可以处理多维数组等,非常简单。但是,此函数应该使用对数组的引用并直接对其进行更改吗?还是我应该返回未设置值的…

LeetCode题解寻找数组中的最大值和最小值

我们经常碰到一个问题,就是需要在一个数组中求最大值或者最小值。如果我们要同时取出最大最小值呢?常见的做法是扫描一次数字,然后分别和当然最大值和当前最小值进行比对,因此总的比较次数是2N,其中N为数组的长度。那么有没有办法减少比较次数呢?题解:```jsfunction quickSort(array, lowIndex, highIndex) { if (l…