Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C相当于Python的map()?_C#_Python - Fatal编程技术网

C# C相当于Python的map()?

C# C相当于Python的map()?,c#,python,C#,Python,通常在Python 2/3中,我们可以使用以下代码将两个空格分隔的整数拆分为两个变量: a,b = map(int,input().split()) 有一个短的C等价于这个吗?i、 没有比下面长的东西 string[] template = Console.ReadLine().Split(); a = Convert.ToInt32(template[0]); b = Convert.ToInt32(template[1]); 你可以试试这个: var result = Console.R

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

a,b = map(int,input().split())
有一个短的C等价于这个吗?i、 没有比下面长的东西

string[] template = Console.ReadLine().Split();
a = Convert.ToInt32(template[0]);
b = Convert.ToInt32(template[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();
你可以试试这个:

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();
这叫选择。您需要导入Linq:

using System.Linq;
然后您可以使用它类似于地图。请注意,它是一个扩展函数,不是完全等价的

var integers = Console.ReadLine().Split().Select(s => Convert.ToInt32(s)).ToArray();
var a = integers[0];
var b = integers[1];
此示例缺少任何正确的错误处理

编辑

添置 写出lambda,这是由于Convert.ToInt32的重载而需要的 这叫选择。您需要导入Linq:

using System.Linq;
然后您可以使用它类似于地图。请注意,它是一个扩展函数,不是完全等价的

var integers = Console.ReadLine().Split().Select(s => Convert.ToInt32(s)).ToArray();
var a = integers[0];
var b = integers[1];
此示例缺少任何正确的错误处理

编辑

添置 写出lambda,这是由于Convert.ToInt32的重载而需要的
向拆分“”添加空间,以定义拆分字符。C的设计目的不是以某种方式分割值,但现在可能,但是我会限制这种“简化”,如果你有一个长版本,那么你可以用你自己的方法来包装它以满足你的需要。我想你可能正在寻找一个c等价物,它可以将数组解压成多个变量,而不是一个映射等价物。如果你想要一个短的版本,我写了一个整洁的助手,可以用于结构。请参见向拆分“”添加空间,以定义拆分字符。C的设计目的不是以某种方式分割值,但现在可能,但是我会限制这种“简化”,如果你有一个长版本,那么你可以用你自己的方法来包装它以满足你的需要。我想你可能正在寻找一个c等价物,它可以将数组解压成多个变量,而不是一个映射等价物。如果你想要一个短的版本,我写了一个整洁的助手,可以用于结构。请看,您可以将lambda简化为s=>int.TryParses,输出变量i?一:default@Emaro我没有遵循这种方法,因为我假设当解析失败时,用户没有给出有效的整数。所以对于输入34AB10,我希望结果是一个由3,4和10三个元素组成的数组,而不是由5个3,4,0,0和10组成的数组。我认为这种方法是有意义的,因为不同的投入应该有不同的产出,而不是相同的产出。例如,对于输入3 4 0 0 10,结果将与输入3 4 a b 10的情况相同。有效点。当然,您仍然可以使用短版本,只需使用另一个默认值即可。说内特里帕斯,我是外号?我是int?:null@Emaro当然可以。您可以将lambda简化为s=>int.TryParses,out var i?一:default@Emaro我没有遵循这种方法,因为我假设当解析失败时,用户没有给出有效的整数。所以对于输入34AB10,我希望结果是一个由3,4和10三个元素组成的数组,而不是由5个3,4,0,0和10组成的数组。我认为这种方法是有意义的,因为不同的投入应该有不同的产出,而不是相同的产出。例如,对于输入3 4 0 0 10,结果将与输入3 4 a b 10的情况相同。有效点。当然,您仍然可以使用短版本,只需使用另一个默认值即可。说内特里帕斯,我是外号?我是int?:null@Emaro当然这是可以做到的。