将多个数组与引用合并
本文关键字:引用 合并 数组 | 更新日期: 2023-09-27 18:37:05
我希望能够拥有多个数组并能够将它们合并在一起。这个概念很容易,但我也希望能够更改原始数组之一并更改合并的数组。这个想法是,将有效地构建某种参考系统,使合并的数组成为指针数组。
示例代码:
int[] a1 = new int[5];
int[] a2 = new int[5];
for (int i = 0; i < 5; i++)
{
a1[i] = i;
a2[i] = i + 5;
}
int[] a3;
a3 = MergeFunction(a1, a2)
Console.WriteLine(a3[0] + "");
a1[0] = 10;
Console.WriteLine(a3[0] + "");
Console.ReadKey();
这将首先输出 0,然后输出 10
你可以
使用 Linq 来解决这个问题。例如
void Main()
{
int[] a1 = new int[5];
int[] a2 = new int[5];
for (int i = 0; i < 5; i++)
{
a1[i] = i;
a2[i] = i + 5;
}
IEnumerable<int> a3;
a3 = MergeFunction(a1, a2);
Console.WriteLine(a3.ToArray()[0] + "");
a1[0] = 10;
Console.WriteLine(a3.ToArray()[0] + "");
Console.ReadKey();
}
public IEnumerable<int> MergeFunction(int[] a1, int[] a2)
{
return a1.Union(a2);
}
由于 linq 的延迟执行,它还显示了基本数组中的更改。
考虑到这一点,您可以编写一个小类来使项目访问的语法类似于项目访问的数组语法。例如:
void Main()
{
int[] a1 = new int[5];
int[] a2 = new int[5];
for (int i = 0; i < 5; i++)
{
a1[i] = i;
a2[i] = i + 5;
}
ArrayMerger<int> a3 = new ArrayMerger<int>(a1,a2);
Console.WriteLine(a3[0] + "");
a1[0] = 10;
Console.WriteLine(a3[0] + "");
a2[0] = 15;
Console.WriteLine(a3[5] + "");
}
public class ArrayMerger<T>
{
private readonly IEnumerable<T> arrayUnion;
public ArrayMerger(T[] array1, T[] array2)
{
arrayUnion = array1.Union(array2);
}
public T this[int i]
{
get
{
return arrayUnion.ElementAt(i);
}
}
}
我认为没有你要找的参考系统。每次对原始数组进行更改时,您都必须进行合并。
就我而言,我实际上不想使用 ints,而是我为示例代码制作的另一个类,我将使用任意 Class,但如果其他人想使用 int,请转到此页面并查看值变量的解决方案。C#:引用数组/指向多个整数的指针
首先,我做了一个非常简单的变量类
public class Variable
{
public int a;
public int b;
public int c;
public Variable(int a, int b, int c)
{
this.a = a;
this.b = b;
this.c = c;
}
}
最后,这是测试参考思想的代码
static void Main(string[] args)
{
//definition of variables
Variable[] a1 = new Variable[5];
Variable[] a2 = new Variable[5];
//fill the variables
for (int i = 0; i < 5; i++)
{
a1[i] = new Variable(i, i* 2, i*3);
a2[i] = new Variable(i + 5, (i+ 5) * 2, (i+5) * 3);
}
//define combination
Variable[] a3;
//join arrays
a3 = a1.Union(a2).ToArray();
//inefficient print
Console.WriteLine(a3[0].a + "");
//change original array
a1[0].a = 10;
//inefficient print
Console.WriteLine(a3[0].a + "");
Console.ReadKey();
}
这将输出 0 然后 10