创建一个数组列表

时间:2015-02-26 20:01:35

标签: c#

我的代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1CS
{
    class Program
    {
        private static List<string[]> list;
        //private static string input;
        static void Main(string[] args)
        {
            list = new List<string[]>();

            int n = 2;

            //------PROBLEM IS HERE::
            string[,] Ar = new string[n,3];
            Ar[0,0] = "A";
            Ar[0,1] = "133";
            Ar[0,2] = "2";
            list.Add(Ar[0]);

            Ar[1,0] = "d";
            Ar[1,1] = "4";
            Ar[1,2] = "2";
            list.Add(Ar);
            //---------------------

            //sort
            var sum = from s in list orderby (Int32.Parse(s[1]) + Int32.Parse(s[2])) select s;
            //change for array
            Array sumn = sum.ToArray();

            foreach (String[] s in sumn)
            {
                String result = String.Join(" ", s);
                Console.WriteLine(result);
            }
        }
    }
}

我想创建一个字符串数组列表。正如你在数组Ar的每一行中看到的那样:

0 column is name of point
1 column is x coordinate
2 column is y coordinate

我想按照它们的坐标总和按升序对点进行排序。是否有使用数组列表来解决此问题的选项(是/否以及为什么)?如果没有请给我另一个解决方案。

3 个答案:

答案 0 :(得分:1)

您应该创建一个新的class,而不是使用其中一个维度来确定使用单个逻辑对象的哪个维度的二维数组。为该类赋予三个属性,并创建该新自定义类型的对象的单维数据结构(无论是数组还是列表)。

答案 1 :(得分:0)

您可以使用List<string[]>

List<string[]> rows = new List<string[]>();
string[] ar = new string[3];
ar[0] = "A";
ar[1] = "133";
ar[2] = "2";
rows.Add(ar);

/* 
   be advised that you can't just go further without creating a new array, 
   as you did in your code 
*/
ar = new string[3];
ar[0] = "D";
ar[1] = "4";
ar[2] = "2";
rows.Add(ar);

...尽管我会建议使用结构,因为它们更清洁,更快速,更容易使用。

使用struct,它看起来像这样:

struct Row {
    string name;
    int x;
    int y;
}

List<Row> rows = new List<Row>();
Row r = new Row();
r.name = "A";
r.x = 133;
r.y = 2;
rows.Add(r);

r = new Row();
r.name = "B";
r.x = 4;
r.y = 2;
rows.Add(r);

答案 2 :(得分:0)

在你的情况下你应该避免使用一个字符串数组,因为你可能有1个问题。如果某些原因导致数组的索引1和2无法解析为int?

同样使用一个类会解释究竟是什么价值,也看看Servy说的是什么。

你问了另一种解决方案,所以这里似乎与你提供的信息有关。

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<Coord>();
            list.Add(new Coord() { Name = "a", X = 133, Y = 2 });
            list.Add(new Coord() { Name = "d", X = 4, Y = 2 });

            var sum = list.OrderBy(x => x.X + x.Y);

            foreach(var s in sum)
            {
                Console.WriteLine(s.ToString(" "));
            }

            Console.Read();

        }
    }

    class Coord
    {
        public string Name { get; set; }
        public int X { get; set; }
        public int Y { get; set; }

        public string ToString(string sep = "")
        {
            return string.Format("{0}{3}{1}{3}{2}", Name, X, Y, sep);
        }
    }
}