为了账号安全,请及时绑定邮箱和手机立即绑定

将数组传递给特定类型的函数

将数组传递给特定类型的函数

C#
森林海 2021-11-28 16:36:03
我需要有关此代码的帮助。我不能让它工作,所以我还不清楚。using System;using System.Collections.Generic;using System.IO;using System.Linq;class Solution{    static int[] foo(int[] array)    {        int[] xx = new int[array.Length];        for(int i = 0; i < array.Length; i++)        {            array[i] *= 2;            Console.WriteLine(array[i]);        }        return array;    }    static void Main(string[] args)    {        int[] array = new int[4] {73, 67, 38, 33 };        foo(array);    }}如何重建foo函数以从数组返回值?我看到了很多关于 void 函数的帮助链接……但它们没有用。当涉及到特定类型的功能时,我无法使其工作。谢谢DDR8
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

    class Solution

    {

        static int[] foo(int[] array)

        {

            int[] xx = new int[array.Length]; // Building this but not using it


            for (int i = 0; i < array.Length; i++)

            {

                array[i] *= 2; //Altering the input array changes the array in the Main method..


                Console.WriteLine(array[i]);

            }


            return array;

        }


        static void Main(string[] args)

        {



            int[] array = new int[4] { 73, 67, 38, 33 };


            foo(array); // Not assigning the values to an object.

            //After this step look at array it will be 146, 134, 76 , 66

        }

    }

所以你正在改变 foo 方法中的原始数组。您正在传递数组对象,然后覆盖这些值。


您声明了一个新的 int[] xx 但随后什么都不做,我认为您应该将源数组复制到新的 xx int[]。这样做不会改变主方法中的原始整数。然后,您可以在 main 方法中分配新数组的返回值。下面的例子:


    class Solution

    {

        static int[] foo(int[] array)

        {


        int[] xx = new int[array.Length];

        //Copy the array into the new array

        Array.Copy(array, xx, array.Length);  


            for (int i = 0; i < xx.Length; i++)

            {

                xx[i] *= 2; 


                Console.WriteLine(xx[i]);

            }

            return xx;

        }


        static void Main(string[] args)

        {

            int[] array = new int[4] { 73, 67, 38, 33 };

            //Assign the new array to an object

            int[] newArray = foo(array);

        }

    }

编辑:我还看到您在顶部包含了 linq,如果您对使用 linq 感兴趣,这将获得相同的结果:


            static void Main(string[] args)

            {

                        int[] array = new int[4] { 73, 67, 38, 33 };

                        int[] newarr = array.Select(arrayvalue => arrayvalue * 2).ToArray();

            }


查看完整回答
反对 回复 2021-11-28
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

您当前的代码确实返回一个数组,但您是:

  1. 更新值array而不是新xx数组

  2. 不分配返回值 Main

这是您修改现有数组而不是新数组的地方:

static int[] foo(int[] array)

{

    int[] xx = new int[array.Length];


    for(int i = 0; i < array.Length; i++)

    {

        // NOTE: modifying array, not xx

        array[i] *= 2;

        Console.WriteLine(array[i]);

    }


    // NOTE: returning array, not xx -- xx is not used

    return array;

}

这是返回数组的缺失赋值:


static void Main(string[] args)

{

    int[] array = new int[4] {73, 67, 38, 33 };

    // You are not assigning the returned array here

    int[] newArray = foo(array);

}

ref如果您需要更改数组大小,您的另一个选择是将数组作为参数传递:


static int[] foo(ref int[] array)

{

    // Modify array as necessary

}


查看完整回答
反对 回复 2021-11-28
  • 2 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信