在Apress的书"插图C#2008"中,pg.343注:
"一维数组在CIL中有特定的指令,允许它们针对性能进行优化.矩形数组没有这些指令......因此,使用锯齿状数组有时会更有效......"
有谁知道如何实现这些性能优化?
例如:二维数组可以像砖墙一样用方形砖可视化,其中每个砖代表我们阵列中的坐标.三维数组可以以相同的方式可视化为框或立方体.
但是,这是一个棘手的部分,您如何可视化具有多个(超过3个)维度的数组?或者,对于那个部分,如何使用多个维度,但多个维度中的多个维度可视化数组?
例如:如何可视化这样的数组:数组[3,3,3,3] [3,3] [3,3,3,3,3] [3]?
如何在C#中创建数组?我已经阅读过有关创建锯齿状数组的内容,但我不确定这是不是最好的方法.我想要实现这样的目标:
string[] myArray = {string[] myArray2, string[] myArray3}
Run Code Online (Sandbox Code Playgroud)
然后我可以像访问它一样 myArray.myArray2[0];
我知道代码不起作用,只是作为一个例子来解释我的意思.
谢谢.
如何使用Linq从锯齿状数组中获取列的元素作为平面数组????
public class Matrix<T>
{
private readonly T[][] _matrix;
public Matrix(int rows, int cols)
{
_matrix = new T[rows][];
for (int r = 0; r < rows; r++)
{
_matrix[r] = new T[cols];
}
}
public T this[int x, int y]
{
get { return _matrix[x][y]; }
set { _matrix[x][y] = value; }
}
// Given a column number return the elements
public IEnumerable<T> this[int x]
{
get
{
}
}
}
Matrix<double> matrix = new Matrix<double>(6,2);
matrix[0, 0] = …Run Code Online (Sandbox Code Playgroud) 下午好,我有一个带有真值和假值(或0和1)的交叉#jagged数组,我想要反转这些值:
1 1 1 1
0 1 1 0
1 1 1 1
1 0 0 1
Run Code Online (Sandbox Code Playgroud)
成为:
0 0 0 0
1 0 0 1
0 0 0 0
0 1 1 0
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以不循环它?像!myJaggedArray?
我来自C#世界,曾经习惯于将数组作为引用类型。据我了解,快速数组中的是值类型,但它们试图充当参考值。
我实际上不知道如何问自己需要什么(我认为这是当我需要知道答案才能提出问题时的情况),但是在C#中,我会说我需要存储对a的内部数组的引用锯齿状数组变成局部变量。
考虑以下代码:
// a function to change row values in-place
func processRow(inout row : [Int], _ value : Int)
{
for col in 0..<row.count
{
row[col] = value;
}
}
// a function to change matrix values in-place
func processMatrix(inout matrix : [[Int]])
{
for rowIdx in 0..<matrix.count
{
// (1) Works with array in-place
processRow(&(matrix[rowIdx]), -1)
// (2) Creates local copy
var r = matrix[rowIdx]; // <--- What to write here to not make a copy but still …Run Code Online (Sandbox Code Playgroud) 我在Powershell中遇到了一个有趣的问题,并且无法找到解决方案.当我谷歌(并找到像这篇文章的东西)时,没有任何涉及我正在尝试做的事情,所以我想我会在这里发布问题.
问题与外部数组长度为1的多维数组有关.似乎Powershell非常坚持像@( @('A') )变为扁平化阵列一样@( 'A' ).这是第一个片段(提示符是>,顺便说一句):
> $a = @( @( 'Test' ) )
> $a.gettype().isarray
True
> $a[0].gettype().isarray
False
Run Code Online (Sandbox Code Playgroud)
所以,我希望$a[0].gettype().isarray是真的,所以我可以将值索引为$a[0][0](真实场景是在循环内处理动态数组,我想得到值$a[$i][$j],但如果内部项是不被识别为数组但作为字符串(在我的情况下),您开始索引字符串的字符,如在$a[0][0] -eq 'T').
我有几个很长的代码示例,所以我最后发布了它们.并且,作为参考,这是在安装了PSv2和PSCX的Windows 7旗舰版上.
考虑代码示例1:我使用+ =运算符手动构建一个简单的数组.中间阵列$w是扁平的,因此不会正确地添加到最终阵列中.我已经在网上找到类似问题的解决方案,基本上是在内部数组之前插入一个逗号来强制外部数组不会变平,这确实有效,但同样,我正在寻找一种可以在循环内构建数组的解决方案(一个锯齿状的数组数组,处理一个CSS文件),所以如果我将前导逗号添加到单个元素数组(实现为中间数组$y),我想对其他数组(如$z)做同样的事情,但这会产生负面影响如何$z添加到最终数组.
现在考虑代码示例2:这更接近我遇到的实际问题.当从函数返回具有一个元素的多维数组时,它将被展平.它离开函数之前是正确的.再一次,这些都是例子,我真的试图处理一个文件,而不必知道该函数是否会回来@( @( 'color', 'black') )或与@( @( 'color', 'black'), @( 'background-color', 'white') )
有没有人遇到这个,有没有人解决这个问题?我知道我可以实例化框架对象,并且我假设如果我创建一个对象[],列表<>或其他类似的东西,一切都会好的,但我一直在处理这个问题.肯定似乎必须有一个正确的方法来做到这一点(无需实例化真正的框架对象).
function Display($x, [int]$indent, [string]$title)
{
if($title -ne '') { write-host …Run Code Online (Sandbox Code Playgroud) 我想知道如何计算锯齿状数组中唯一值的数量.
我的域对象包含一个具有空格分隔值的字符串属性.
class MyObject
{
string MyProperty; //e.g = "v1 v2 v3"
}
Run Code Online (Sandbox Code Playgroud)
给定一个MyObject 列表,如何确定唯一值的数量?
以下linq代码返回锯齿状数组值的数组.一种解决方案是存储临时单个项目数组,循环遍历每个锯齿状数组,如果值不存在,则添加它们.然后一个简单的计数将返回唯一的值数.但是,想知道是否有更好的解决方案.
db.MyObjects.Where(t => !String.IsNullOrEmpty(t.MyProperty))
.Select(t => t.Categories.Split(new char[] { ' ' },
StringSplitOptions.RemoveEmptyEntries))
.ToArray()
Run Code Online (Sandbox Code Playgroud)
以下是一个更具可读性的示例:
array[0] = { "v1", "v2", "v3" }
array[1] = { "v1" }
array[2] = { "v4", "v2" }
array[3] = { "v1", "v5" }
Run Code Online (Sandbox Code Playgroud)
从所有值中,唯一项为v1,v2,v3,v4,v5.
唯一商品的总数为5.
有没有一个解决方案,可能使用linq,只返回唯一值或返回唯一值的数量?
我正在尝试将DataTable保存到Excel工作表中。我的代码是这样的。
Excel.Range range = xlWorkSheet.get_Range("A2");
range = range.get_Resize(dtExcel.Rows.Count, dtExcel.Columns.Count);
object[,] rng1 = new object[dtExcel.Rows.Count, dtExcel.Columns.Count];
Run Code Online (Sandbox Code Playgroud)
Excel范围要求范围值作为array [,],但我将DataTable作为锯齿状的array [] []。
object[][] rng2 = dtExcel.AsEnumerable().Select(x => x.ItemArray).ToArray();
Run Code Online (Sandbox Code Playgroud)
Is there any built-in function to directly convert the jagged array[][] to a 2D array[][] ? Iterating through Excel, DataTable and assigning seems slower with bulk data..
Also I don't want to setup querying with DSN for excel.. I chose excel storage to avoid the configuring of any databases.. :P I found a detailed explanation …
c# jagged-arrays type-conversion export-to-excel multidimensional-array
假设我们有一个具有相等长度项数组的锯齿状数组(即忽略超出范围):
int[][] jaggedArray = new int[][]
{
new int[] {1, 3, 5},
new int[] {0, 2, 4},
new int[] {11,22,6}
};
Run Code Online (Sandbox Code Playgroud)
应用c#Linq执行列操作的最优雅方法是什么.简单列操作的示例结果Sum和Average:
Sum()列结果:int [] {12,27,15} Average()列结果:int [] {4,9,5} ...对列进行操作的任何其他类似扩展方法.
我能找到的最相关的问题就在这里.
感谢您的回答,我已经接受了Jay的答案,并在此处发布了一个类似但更复杂的列集合.
jagged-arrays ×10
c# ×9
arrays ×7
linq ×3
c++ ×1
math ×1
matrix ×1
mutability ×1
optimization ×1
powershell ×1
swift ×1