2015-01-12 104 views
1

我希望能够拥有多个阵列并能够将它们合并在一起。这个概念很简单,但我也希望能够改变其中一个原始数组,并改变合并数组。这个想法是,某种参考系统将被有效地构建,使得合并数组成为一个指针数组。将多个阵列与参考合并

示例代码:

 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

+0

那么什么是码这个问题?你认为什么是“合并”? –

回答

0

在我而言,我并不真的想使用整数,但我有这么示例代码由另一个类,我会使用任意类,但如果别人想使用int,转到此页面并查看值变量的解决方案。 C#: Array of references/pointers to a number of integers

首先,我做了一个非常简单的变量类

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

0

我觉得有没有你要找的参考系统。每当对原始数组进行更改时,您都必须进行合并。

1

你可以使用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); 
     } 
    } 
}