C#:数组的高级索引(如在Matlab中,NumPy),无需像LINQ这样的重型工具
所以我刚开始学习C#,来自Matlab/Python背景。我最怀念的是高级索引查询,如: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继承
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我同意,解析字符串会带来额外的工作。我可以考虑为此编写一个函数,但这又会使多维数组中的语法/查询速度飞快。会考虑它