最佳方法“推入” C#数组

under

大家好

因此,我知道这是一个讨论得相当广泛的问题,但我似乎找不到确切的答案。我知道您可以使用列表执行我要的操作,但这不能解决我的问题。

我用初学者C#授课。我有PHP和Java Script的背景,因此倾向于从这些语言方面进行思考。

我一直在寻找向学生展示如何动态地向数组添加元素的最佳方法。我们不能使用列表,因为这些都不是我目前教的课程提纲的一部分(尽管它们确实会在以后的课程中出现)这学期)。

因此,我正在寻找执行Java array.push(newValue)类型场景的最简单方法,这对于新手程序员而言是可以理解的,而无需教他们不好的实践。

到目前为止,这是我一直解决该问题的方式:

for (int i = 0; i < myArray.Length; i++)
{
   if(myArray[i] == null)
   {
       myArray[i] = newValue;
       break;
   }
}

我只需要知道这是否是可以接受的方法,是否在教给他们任何不良做法,或者是否有更好/更简单的方法来实现我的目标。

编辑问题的症结在于,需要将元素添加到数组的第一个空插槽中,这就是Java push函数可以做到的。

任何建议将不胜感激。

金西尼

array.push就像List<T>.Add.NET数组是固定大小的,因此您实际上不能添加新元素。您所能做的就是创建一个比原始数组大一个元素的新数组,然后设置最后一个元素,例如

Array.Resize(ref myArray, myArray.Length + 1);
myArray[myArray.GetUpperBound(0)] = newValue;

编辑:

对于这个问题的修改,我不确定这个答案是否真的适用:

问题的症结在于,需要将元素添加到数组的第一个空插槽中,这就是Java push函数可以做到的。

我提供的代码有效地附加了一个元素。如果目标是设置第一个空元素,则可以执行以下操作:

int index = Array.IndexOf(myArray, null);

if (index != -1)
{
    myArray[index] = newValue;
}

编辑:

这是一个扩展方法,该方法封装该逻辑并返回放置值的索引,如果没有空元素,则返回-1。请注意,此方法也适用于值类型,将具有该类型默认值的元素视为空。

public static class ArrayExtensions
{
    public static int Push<T>(this T[] source, T value)
    {
        var index = Array.IndexOf(source, default(T));

        if (index != -1)
        {
            source[index] = value;
        }

        return index;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章