gpt4 book ai didi

c# - 按引用传递而不是按值传递,为什么?

转载 作者:行者123 更新时间:2023-12-03 19:11:17 25 4
gpt4 key购买 nike

我想做的是将我的球员列表的名字和分数转储到一个临时数组中进行排序,以便它们可以显示在记分牌上。

出于某种原因,它似乎保留了对值的引用而不是值本身。排序后,记分板为每个条目显示“玩家 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!

关于c# - 按引用传递而不是按值传递,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com