我需要在实际层面上了解如何在不知道大小的情况下在 C# 中创建矩阵[][]。 因此还有如何修改它(根据搜索键删除元素)。
我有一个示例循环。两个随机字符串变量。然后我就无法继续了......
private static Random random = new Random();
for (int i=0; i<unKnown; i++){
var firstVar = RandomString(5);
var secondVar = RandomString(20);
//Matrix[][]
}
public static string RandomString(int length){
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[random.Next(s.Length)]).ToArray());
}
谢谢你
数组的大小是固定的。它们不会自动调整大小。例如。大小是在创建数组时定义的
string[] array = new string[10];
如果您的数组是二维 (10x10) 且您删除 (1:1) 处的值,则数组仍保留 10x10,但 1:1 处的字段现在为空。
如果您需要调整其大小的解决方案,您可能需要研究列表。
否则,我建议您阅读文档。
这真的取决于你想做什么。
如果您想要一个二维值数组,您可以使用多维数组。这支持任意维度,但对于更多维度,数据大小往往会增加,其他解决方案可能更可取:
var matrix = new double[4, 2];
如果您想做数学,您可能需要使用像 Math.Net 这样具有专门矩阵类型的库:
var matrix = Matrix<double>.Build.Dense(4, 2);
如果您想做计算机图形,您可能需要使用专门的库,例如 system.Numerics.Matrix4x4
var matrix = new Matrix4x4();
创建自己的包装常规数组的矩阵类也不是特别困难。这样做的好处是互操作性通常更容易,因为大多数框架和工具都接受指针或一维数组,而很少可以处理多维数组。索引可以这样完成:
public class MyMatrix<T>
{
public int Width { get; }
public T[] Data { get; }
public T this[int x, int y]
{
get => Data[y * Width + x];
set => Data[y * Width + x] = value;
}
}
还有锯齿状数组,但不能保证这些将是“正方形”,因此如果您想要“矩阵”,它们可能不合适。
在所有情况下,如果您想要进行任何类型的替换,您都需要遍历矩阵并检查每个元素。有些替代方案需要单独的宽度/高度循环,而有些则允许单个循环。
我不确定你想要一个矩阵还是一个数组。
矩阵就像
string[,] matrix = new string[10, 10];
数组就像
string[] array = new string[10];
您可以使用
array[i]
访问数组,使用 matrix[i, j]
访问矩阵
您还可以使用
List<List<string>> matrix = new List<List<string>>();
使用起来可能更方便,也可以通过索引器访问。例如
matrix[i][j] = "bob";
matrix[i].RemoveAt(j);
鉴于您提交的问题,也许只需
List<string>
就适合您。
Array.CreateInstance 可能会有所帮助:https://learn.microsoft.com/en-us/dotnet/api/system.array.createinstance?view=net-9.0