none
arraylist RRS feed

  • 问题

  • 请问用 arraylist 这个类  能不能写出  二维数组 啊?

    我只会用arraylist 做一维数组!!

    如果可以的话,请写出一个简单的例子!!

    本人新手,谢谢帮忙!

    2012年1月17日 12:56

答案

  • 您可以改用List<List<T>>的方式写出 二维数组

    可以参考此篇做改写

    http://stackoverflow.com/questions/678178/how-can-i-convert-a-list-to-a-multi-dimensional-array

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication2
    {
        public class MyArrayConvert<T>
        {
            public static T[,] To2dArray(List<List<T>> list)
            {
                if (list.Count == 0 || list[0].Count == 0)
                    throw new ArgumentException("The list must have non-zero dimensions.");
    
                var result = new T[list.Count, list[0].Count];
                for (int i = 0; i < list.Count; i++)
                {
                    for (int j = 0; j < list[0].Count; j++)
                    {
                        if (list[i].Count != list[0].Count)
                            throw new InvalidOperationException("The list cannot contain elements (lists) of different sizes.");
                        result[i, j] = list[i][j];
                    }
                }
    
                return result;
            } 
    
    
        }
    }
    
    

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                List<List<int>> list = new List<List<int>>();
                list.Add(new List<int>() { 1, 2, 3 });
                list.Add(new List<int>() { 4, 5, 6 });
    
                //Convert to two dimensional array
                int[,] results = MyArrayConvert<int>.To2dArray(list);
    
                //show result
                for (int i = 0; i <= results.GetUpperBound(0); i++)
                {
                    for (int j = 0; j <= results.GetUpperBound(1); j++)
                    {
                        Console.Write(results[i,j]+",");
                    }
                    Console.WriteLine();
                }
    
                Console.ReadKey();
    
            }
       
        }
    }
    
    

    Result:


    2012年1月17日 14:50

全部回复

  • 您可以改用List<List<T>>的方式写出 二维数组

    可以参考此篇做改写

    http://stackoverflow.com/questions/678178/how-can-i-convert-a-list-to-a-multi-dimensional-array

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication2
    {
        public class MyArrayConvert<T>
        {
            public static T[,] To2dArray(List<List<T>> list)
            {
                if (list.Count == 0 || list[0].Count == 0)
                    throw new ArgumentException("The list must have non-zero dimensions.");
    
                var result = new T[list.Count, list[0].Count];
                for (int i = 0; i < list.Count; i++)
                {
                    for (int j = 0; j < list[0].Count; j++)
                    {
                        if (list[i].Count != list[0].Count)
                            throw new InvalidOperationException("The list cannot contain elements (lists) of different sizes.");
                        result[i, j] = list[i][j];
                    }
                }
    
                return result;
            } 
    
    
        }
    }
    
    

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                List<List<int>> list = new List<List<int>>();
                list.Add(new List<int>() { 1, 2, 3 });
                list.Add(new List<int>() { 4, 5, 6 });
    
                //Convert to two dimensional array
                int[,] results = MyArrayConvert<int>.To2dArray(list);
    
                //show result
                for (int i = 0; i <= results.GetUpperBound(0); i++)
                {
                    for (int j = 0; j <= results.GetUpperBound(1); j++)
                    {
                        Console.Write(results[i,j]+",");
                    }
                    Console.WriteLine();
                }
    
                Console.ReadKey();
    
            }
       
        }
    }
    
    

    Result:


    2012年1月17日 14:50
  • 请问用 arraylist 这个类  能不能写出  二维数组 啊?

    我只会用arraylist 做一维数组!!

    如果可以的话,请写出一个简单的例子!!

    本人新手,谢谢帮忙!

    自从net2.0开始,建议还是使用List嵌套或者是小欧给出的int[][]交错数组比较好,另外你当然可以使用ArrayList类来完成类似List的功能,但是ArrayList是非泛型数组,存储可能造成频繁装箱和拆箱性能问题,也容易导致转化错误。

    当然,所有array都起源于Array类,你也可以使用这个类:

    namespace A
    {
    class Program
    {
    static void Main(string[] args)
    {
    Array a2 = Array.CreateInstance(typeof(Array), 5);   //Array的Array

    for (int i = 0i < a2.Lengthi++)
    {
                    Array nesta = Array.CreateInstance(typeof(int),5);
                    for (int j = 0j < nesta.Length++j)
                    {
                        nesta.SetValue(j + 1j);
                    }
                        a2.SetValue(nestai);
    }


    for(int i=0;i<a2.Length;++i)
    {
    foreach (var subitem in (Array)a2.GetValue(i))
    {
    Console.WriteLine(subitem);
    }
    }
    }
    }
    }


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2012年1月18日 3:16
    版主
  • 二维数组其实就是元素是数组的一维数组,所以不管你用什么数组的数据结构都是可以的。


    Please mark the post answered your question as the answer, and vote other helpful posts, so they will appear differently to other users for the same problem. 请将解决实际问题的帖子标记为“答案”,并给其他有帮助的帖子投票,这样其他人有同样问题的时候可以快速找到解决方案。谢谢!
    2012年1月19日 5:11
    版主
  • 感谢!!!!!!
    2012年1月21日 1:50