C#如何在不知道新数组长度的情况下将数组中的值保存到新数组中

Posted

技术标签:

【中文标题】C#如何在不知道新数组长度的情况下将数组中的值保存到新数组中【英文标题】:C# how to save values from a array to a new array while not knowing the length of the new array 【发布时间】:2021-11-24 05:13:57 【问题描述】:

例如,这里的代码可以很好地完成这个特定任务,但我真的不喜欢我需要重复使用循环 2 次来获取大小然后实现方法,感觉不对。

      public static int[] FilterByDigit(int[] source, int digit)
        
            int size = 0;

            for (int i = 0; i < source.Length; i++)
            
                bool result = source[i].ToString().Contains(digit.ToString());

                if (result)
                
                    size++;
                
            

            int[] arr = new int[size];
            int count = 0;

            for (int i = 0; i < source.Length; i++)
            
                bool result = source[i].ToString().Contains(digit.ToString());

                if (result)
                
                    arr[count] = source[i];
                    count++;
                
            

            return arr;
        

有没有办法在第一个循环中获取大小,然后实现方法,不需要第二个循环?

如果您需要了解此特定任务:

        /// <summary>
        /// Returns new array of elements that contain expected digit from source array.
        /// </summary>
        /// <param name="source">Source array.</param>
        /// <param name="digit">Expected digit.</param>
        /// <returns>Array of elements that contain expected digit.</returns>
        /// <exception cref="ArgumentNullException">Thrown when array is null.</exception>
        /// <exception cref="ArgumentException">Thrown when array is empty.</exception>
        /// <exception cref="ArgumentOutOfRangeException">Thrown when digit value is out of range (0..9).</exception>
        /// <example>
        /// 1, 2, 3, 4, 5, 6, 7, 68, 69, 70, 15, 17  =>  7, 70, 17  for digit = 7.
        /// </example>

【问题讨论】:

【参考方案1】:

试试这个

public static int[] FilterByDigit(int[] source, int digit)
  
    return source.Where(s => s.ToString().Contains(digit.ToString()));

输出

 int digit=7;
  var source = new int[] 1, 2, 3, 4, 5, 6, 7, 68, 69, 70, 15, 17;
  var result =FilterByDigit(source,digit);
 var output=string.Join(",",result);
    
7,70,17

【讨论】:

感谢您的回答,但我知道linq 可以更轻松地完成此特定任务。我正在寻找一种方法来保存新数组并暂时返回它而不使用两个类似的循环。 @Linascts 查看我的更新答案

以上是关于C#如何在不知道新数组长度的情况下将数组中的值保存到新数组中的主要内容,如果未能解决你的问题,请参考以下文章

如何在不复制 C# 的情况下将结构数组元素提取到变量中?

如何在没有数据库的情况下将数据保存到数组中

如何在不循环的情况下将数组的内容复制到 C++ 中的 std::vector?

如何在不覆盖以前数据的情况下将数据添加到 XML 文件(C#)

如何在不使用向量的情况下将数组传递给函数?

如何在不破坏我的结构的情况下将特定单元格排除到 BigQuery 中的数组数组中?