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

C#如何从列表中选取包含x号的数字?

C#如何从列表中选取包含x号的数字?

C#
至尊宝的传说 2021-04-02 22:12:42
   static void Main(string[] args)    {        List<int> Allnumber = new List<int>();        Random rnd = new Random();        while (true)        {            int dice = rnd.Next(1, 100);            Console.WriteLine("Random number between 1 and 100 : {0}", dice);            Allnumber.Add(dice);            if (dice == 1)                break;        }        Console.WriteLine();        Console.WriteLine("Allnumber : " + string.Join(" ", Allnumber));        List<int> Odd = (from number in Allnumber where number % 2 != 0 select number).ToList();        List<int> Even = new List<int>(from number in Allnumber where number % 2 == 0 select number);        Console.WriteLine("Odd : " + string.Join(" ", Odd));        Console.WriteLine("Even : " + string.Join(" ", Even));我要创建一个新列表,其中包括Allnumber列表中的3。它应包含所有具有3(3、13、23、33、34、36、39、43、53 ...)的数字。反正只能拿起3秒?我发现那里有Findall,Contain方法,但不能将它用于int类型列表。谢谢每个人都不能相信有很多方法可以做到这一点:D
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

只是为了好玩,这里是一个yield版本和IEnumerable扩展方法


public static class StupidExtensions

{

    public static IEnumerable<int> Digits(int input)

    {

        do yield return input % 10; while ((input /= 10) > 0);

    }


    public static IEnumerable<int> WhereDigit(this IEnumerable<int> source, int digit) 

              => source.Where(x => Digits(x).Contains(digit));

}

用法


var result = Allnumber.WhereDigit(3);


这里还有2个


protected override IEnumerable<int> InternalRun(IEnumerable<int> values, int digit)

{

   var ary = values.ToArray();

   var result = new List<int>();

   fixed (int* pAry = ary)

   {

      for (var p = pAry; p < pAry + ary.Length; p++)

         for (var d = *p; d > 0; d /= 10)

            if (d % 10 == digit){ result.Add(*p); break;}

   }  

}


protected override IEnumerable<int> InternalRun(IEnumerable<int> values, int digit)

{

   foreach (var val in values)

      for (var d = val; d > 0; d /= 10)

         if (d % 10 == digit)

            yield return val;

}


查看完整回答
反对 回复 2021-04-17
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

首先将Where子句中的所有数字转换为ToString,然后使用Contains来获取包含数字3的所有数字的列表:

var result = Allnumber.Where(x => x.ToString().Contains("3")).ToList();


查看完整回答
反对 回复 2021-04-17
  • 3 回答
  • 0 关注
  • 100 浏览

添加回答

举报

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