相关疑难解决方法(0)

由ref传递的列表 - 帮我解释一下这种行为

看看以下程序:

class Test
{
    List<int> myList = new List<int>();

    public void TestMethod()
    {
        myList.Add(100);
        myList.Add(50);
        myList.Add(10);

        ChangeList(myList);

        foreach (int i in myList)
        {
            Console.WriteLine(i);
        }
    }

    private void ChangeList(List<int> myList)
    {
        myList.Sort();

        List<int> myList2 = new List<int>();
        myList2.Add(3);
        myList2.Add(4);

        myList = myList2;
    }
}
Run Code Online (Sandbox Code Playgroud)

我假设myList已经过去了ref,输出会

3
4
Run Code Online (Sandbox Code Playgroud)

该列表确实"通过ref传递",但只有该sort函数生效.以下声明myList = myList2;无效.

所以输出实际上是:

10
50
100
Run Code Online (Sandbox Code Playgroud)

你能帮我解释一下这个行为吗?如果确实myList没有通过ref(因为它看起来myList = myList2没有生效),如何myList.Sort()生效?

我甚至假设该语句不生效,输出为:

100
50
10
Run Code Online (Sandbox Code Playgroud)

c# list pass-by-reference

97
推荐指数
5
解决办法
9万
查看次数

为什么这个Merge Sort java脚本实现不起作用?

我已经尝试了一整天,似乎无法找出它为什么不起作用.我认为问题在于我使用JavaScript语言的技巧.我可能会错过一些关于参数传递的概念.你能告诉我错误在哪里吗?

这是我的实现,基于我一年前在C#中编写的另一个实现,可以在这里找到.

所以这里是代码(您可以直接在Chromes控制台上尝试,只需复制/粘贴它就会"工作"):

function merge(A, p, q, r){
    var n1 = q - p + 1;
    var n2 = r - q;

    var i = 0;
    var j = 0;

    var L = [];
    while (i < n1){
        L.push(A[p + i++]);
    }

    var R = [];
    while(j < n2){
        R.push(A[q + j++ + 1]);
    }

    L.push(Number.MAX_VALUE);
    R.push(Number.MAX_VALUE);

    i = 0; 
    j = 0; 

    var k = p;
    while(k <= r){
        if(L[i] <= R[i]){
            A[k] = L[i];
            i = …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm mergesort

0
推荐指数
1
解决办法
270
查看次数

标签 统计

algorithm ×1

c# ×1

javascript ×1

list ×1

mergesort ×1

pass-by-reference ×1