You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现筛选包含指定数字的数组元素的FilterByDigit方法?

实现FilterByDigit方法的相关问题解答

关于能否使用Array.FindAll的问题

当然可以用!Array.FindAll 不属于LINQ范畴(它是System.Array类的原生方法,LINQ主要在System.Linq命名空间下),完全符合你“禁止使用LINQ”的要求。用它实现的话,代码会更简洁,不需要手动做两次遍历统计和复制。

用Array.FindAll改写的示例:

public static int[] FilterByDigit(int[]? source, int digit)
{
    if (source == null)
        throw new ArgumentNullException(nameof(source));
    if (source.Length == 0)
        throw new ArgumentException("Invalid size");
    if (digit < 0 || digit > 9)
        throw new ArgumentOutOfRangeException(nameof(digit));

    return Array.FindAll(source, element => IsContainDigit(element, digit));
}

你的循环实现思路分析

你当前的代码逻辑完全正确:

  • 先遍历一次统计符合条件的元素数量,再创建对应大小的数组,第二次遍历填充元素,这个思路没问题,能正确完成需求。
  • IsContainDigit方法的处理很周全,考虑到了元素和指定数字都是0的特殊情况,以及负数取绝对值的边界场景。

如果想优化,可以用List<int>避免两次遍历,一次遍历就能收集所有符合条件的元素,最后转数组:

public static int[] FilterByDigit(int[]? source, int digit)
{
    if (source == null)
        throw new ArgumentNullException(nameof(source));
    if (source.Length == 0)
        throw new ArgumentException("Invalid size");
    if (digit < 0 || digit > 9)
        throw new ArgumentOutOfRangeException(nameof(digit));

    List<int> result = new List<int>();
    foreach (int num in source)
    {
        if (IsContainDigit(num, digit))
            result.Add(num);
    }
    return result.ToArray();
}

这种写法代码更简洁,且仅需一次遍历,效率更高。

内容的提问来源于stack exchange,提问作者antonkokt_deprecated

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:47:18