C#是否等效于Python的map()?

时间:2018-09-26 07:13:16

标签: c# python

通常在Python 2/3中,我们可以使用以下代码将两个以空格分隔的整数拆分为两个变量:

a,b = map(int,input().split())

是否有一个与此相对应的简短C#? (即不超过以下内容)

string[] template = Console.ReadLine().Split();
a = Convert.ToInt32(template[0]);
b = Convert.ToInt32(template[1]);

2 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

var result = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();

但是,如果输入无效,以上代码将崩溃

更容错的方法如下:

var result = Console.ReadLine()
                    .Split(' ')
                    .Select(input => 
                    {
                        int? output = null;
                        if(int.TryParse(input, out var parsed))
                        {
                            output = parsed;
                        }
                        return output;
                    })
                    .Where(x => x != null)
                    .Select(x=>x.Value)
                    .ToArray();

答案 1 :(得分:1)

它称为Select()。您需要导入Linq:

using System.Linq;

然后,您可以像使用地图一样使用它。请注意,它是扩展功能,并非完全等效。

var integers = Console.ReadLine().Split().Select(s => Convert.ToInt32(s)).ToArray();
var a = integers[0];
var b = integers[1];

此示例缺少任何适当的错误处理。


修改

  • 添加ToArray()
  • 写出lambda,这是由于Convert.ToInt32的重载所致