Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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#:数组的高级索引(如在Matlab中,NumPy),无需像LINQ这样的重型工具_C#_Arrays_Numpy - Fatal编程技术网

C#:数组的高级索引(如在Matlab中,NumPy),无需像LINQ这样的重型工具

C#:数组的高级索引(如在Matlab中,NumPy),无需像LINQ这样的重型工具,c#,arrays,numpy,C#,Arrays,Numpy,所以我刚开始学习C#,来自Matlab/Python背景。我最怀念的是高级索引查询,如: a = [1 2 3 4;5 6 7 8]; b = a[2,2:4]; // Gives: b = [6 7 8]; 在C#(和大多数其他编程语言)中,我有几种可能实现这一点: 通过使用循环。高维数组将产生大量(类似的)代码 使用LINQ:一个很大的库,语法对我来说仍然很麻烦和缓慢 扩展数组,但这不适用于方括号操作符,但更接近于这个想法 正在编写我自己的类,但是我将无法从System.Array继承

所以我刚开始学习C#,来自Matlab/Python背景。我最怀念的是高级索引查询,如:

a = [1 2 3 4;5 6 7 8];
b = a[2,2:4]; // Gives: b = [6 7 8];
在C#(和大多数其他编程语言)中,我有几种可能实现这一点:

  • 通过使用循环。高维数组将产生大量(类似的)代码
  • 使用LINQ:一个很大的库,语法对我来说仍然很麻烦和缓慢
  • 扩展数组,但这不适用于方括号操作符,但更接近于这个想法
  • 正在编写我自己的类,但是我将无法从System.Array继承
所以在我看来,实现这样的对数组的调用应该是“可行的”:

b = a["1,1:3"]; // compare to example above, just 0-based indexing here
所以我想做的是

  • 重载数组类/从数组类继承一个类(因此它保持泛型)
  • 添加自定义字符串解析
  • 不用写太多代码。我错过什么了吗


    请注意:这对我来说是一个练习,而不是一项实际任务。所以我知道我可以使用Python来编译代码。我只是想知道这是否可能,如果可能的话,哪种方法是最好的。

    您不能从数组继承或添加索引器作为数组的扩展方法。但您可以从列表继承,并根据需要添加索引器。或者围绕数组编写一个包装器,将所有功能委托给底层数组并添加索引器。可能最好不要使用字符串,使用类似于
    b=a[1,slice(1,3)]
    的东西,或者使用扩展方法
    b=a[1,(1)。to(3)]
    @Evk:谢谢,列表是很好的建议,然而,我必须投入工作,使它们具有多维性。包装器似乎是一个很好的解决方案,但仍然会导致我实际想要实现的一些开销…@Eric我同意,解析字符串会带来额外的工作。我可以考虑为此编写一个函数,但这又会使多维数组中的语法/查询速度飞快。会考虑它