gpt4 book ai didi

c# - 如何从 C# 中的数组中提取行?

转载 作者:太空宇宙 更新时间:2023-11-03 12:54:37 24 4
gpt4 key购买 nike

注意:BJ Myers 的评论很有用,实际上就是答案。但是,由于这是评论,我无法将其标记为答案,但我已将更正的代码(使用他的建议)放在这个问题的末尾。

Original question below continues:

这种情况起初可能看起来很奇怪,但这是我打算做的:

与 Python 中的语法类似,我不想创建多维数组(准确地说是二维数组),而是想创建数组的数组(实际上是向量的向量)。

我知道 C# 不允许我在安全代码中创建指针,但我仍然很好奇是否有更安全的方法来完成此任务而无需获取安全代码限制。

所以,我想出了下面的代码,但无法弄清楚如何从数组中提取特定行(如注释行之间所示)。

是否可以一次传递第 r 行,还是我需要为第 r 行创建另一个临时存储,然后传递该临时向量?

(系统:Windows-10、VS-2013、C#)

using System;

public class Vector {
public double[] data;

public Vector(double[] data) {
this.data = new double[data.GetLength(0)];
this.data = data;
}
}

public class Matrix {
private int row, col;

public Matrix(double[,] data) {
this.row = data.GetLength(0);
this.col = data.GetLength(1);
Vector[] v = new Vector[this.row];

for (int r = 0; r < this.row; r++) {
// ****** this line below ******
v[r] = new Vector(data[r,???]);
// ****** how to extract the r'th row ******
}
}

static void Main(string[] args) {
double[,] data = { { 9.0, 8.0, 7.0 }, { 5.0, 6.0, 4.0 }, { 3.0, 2.0, 2.0 } };
Matrix A = new Matrix(data);
Console.ReadLine();
}
}

The corrected code is below:

using System;

public class Vector {
public double[] data;

public Vector(double[] data) {
this.data = new double[data.GetLength(0)];
this.data = data;
for (int i = 0; i < data.GetLength(0); i++) {
Console.Write("{0: 0.000 }", this.data[i]);
}
Console.WriteLine();
}
}

public class Matrix {
private int row, col;

public Matrix(double[][] data) {
this.row = data.GetLength(0);
this.col = data[0].GetLength(0);
Vector[] v = new Vector[this.row];

for (int r = 0; r < row; r++) {
v[r] = new Vector(data[r]);
}

Console.WriteLine("rows: " + this.row.ToString());
Console.WriteLine("cols: " + this.col.ToString());
}

static void Main(string[] args) {
double[][] data = { new double[] { 9.0, 8.0, 7.0 },
new double[] { 5.0, 6.0, 4.0 },
new double[] { 3.0, 2.0, 2.0 } };
Matrix A = new Matrix(data);
Console.ReadLine();
}
}

最佳答案

好吧,你想制作一个数组类和类似的访问吗?制作一个索引器what is an indexer? - 这是一种让您的类像数组一样可访问的方法。

查看示例链接,我会帮助您处理具体案例。

public class Vector {

public double[] data;
public double this[int i]
{
get
{
// This indexer is very simple, and just returns or sets
// the corresponding element from the internal array.
return data[i];
}
set
{
data[i] = value;
}
}
public Vector(double[] data) {
this.data = new double[data.GetLength(0)];
this.data = data;
}
}

一旦它像这样定义,这是完全有效的:

double elementArray = new double[data.GetLength(1)]; // declaring an array, the size of the second dimention of the data array.
for(int i =0; i<data.GetLength(1);i++)
{
elementArray[i] = data[r,i]; // adding all the elements to the list
}
v[r] = new Vector(elementArray);

编辑:BJ Myers 的评论是正确的,此解决方案也适用于锯齿状数组,但请确保您像他提到的那样正确声明它。

编辑 2:在这里使用列表毫无意义,将结构更改为数组。

关于c# - 如何从 C# 中的数组中提取行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34364871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com