Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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
Python中多变量迭代的C#模拟?_C#_Python_Multidimensional Array_Iteration - Fatal编程技术网

Python中多变量迭代的C#模拟?

Python中多变量迭代的C#模拟?,c#,python,multidimensional-array,iteration,C#,Python,Multidimensional Array,Iteration,在Python中,可以同时迭代多个变量,如下所示: my_list = [[1, 2, 3], [4, 5, 6]] for a, b, c in my_list: pass var myList = new[] {Tuple.Create(1, 2, 3), Tuple.Create(4, 5, 6)}; foreach (var tuple in myList) { //your code } 有比这更接近的C#模拟吗 List<List<int>&g

在Python中,可以同时迭代多个变量,如下所示:

my_list = [[1, 2, 3], [4, 5, 6]]

for a, b, c in my_list:
    pass
var myList = new[] {Tuple.Create(1, 2, 3), Tuple.Create(4, 5, 6)};
foreach (var tuple in myList)
{
    //your code
}
有比这更接近的C#模拟吗

List<List<int>> myList = new List<List<int>> {
    new List<int> { 1, 2, 3 },
    new List<int> { 4, 5, 6 }
};

foreach (List<int> subitem in myList) {
    int a = subitem[0];
    int b = subitem[1];
    int c = subitem[2];
    continue;
}
List myList=新列表{
新名单{1,2,3},
新名单{4,5,6}
};
foreach(myList中的列表子项){
int a=子项[0];
int b=子项[1];
int c=子项[2];
继续;
}

编辑-只是澄清一下,在C#示例中,确切的代码是必须为每个索引指定一个名称。

与您拥有的没有太大区别,但这又如何

foreach (var subitem in myList.Select(si => new {a = si[0], b = si[1], c = si[2]})
{
                int a = subitem.a;
                int b = subitem.b;
                int c = subitem.c;
                continue;
}
C#对此没有特殊的构造,也没有多个赋值

a, b = 1, 2
在c#中不可能


您还应该注意,列表列表并不是真正的c风格。您通常使用
a
b
c
属性创建一个类,并始终保留这些属性的列表。

您可以尝试以下方法:

my_list = [[1, 2, 3], [4, 5, 6]]

for a, b, c in my_list:
    pass
var myList = new[] {Tuple.Create(1, 2, 3), Tuple.Create(4, 5, 6)};
foreach (var tuple in myList)
{
    //your code
}

您可以创建out扩展方法,使用lambda表达式可以做到这一点

但最终会是这样的:

对于(int i=0;i
这只是代码“sugar”,不应在共享代码中使用IMHO

注意:这只是元组解包的一个实例(它还允许并行赋值
a,b=…
)。听说“列表列表”不是C风格,我很惊讶。这类事情难道不是如此基本以至于它实际上不是一个语言风格的问题,而“风格”更多的是一个你如何做OP所要求的事情的问题吗?@tenfour,在我在工作中遇到的代码和.NET框架中,除非你真的有矩阵类型的数据,否则你很少看到
列表
。我不记得看到过任何真正高质量的c代码,每个内部列表都具有相同的长度,并且内部列表中的位置神奇地决定了其含义(如问题中所述)。看看
大小
等,它们是“只是”对数据,但它们的参数有明确的命名。没错-事实上,我刚刚意识到,有一个假设,即内部列表总是恰好包含3项,这会改变一切。我的想法更像是
列表
,其中
用户
拥有成员
公共IEnumerable专利。并询问“如何获得给定
列表的所有专利的列表”
。您能详细说明
新{…}
位在做什么吗?新{…}创建了一个匿名类型。你可以搜索c#匿名类型;外面有很多信息。这是我能找到的一篇博文。