急急急急急急急急急急急急急急急急!!!!!请教个好的分类方法

gz5182009 2014-01-20 11:01:11
现在有这样的一堆数据,x、y是坐标,我现在想把这些坐标根据前面的序号对应放入几个数组里面,请教个效率高的方法。
j1 X,Y
j2 X,Y
j3 X,Y
j4 X,Y
j1 X,Y
j5 X,Y
j6 X,Y
j7 X,Y
j8 X,Y
j5 X,Y
j9 X,Y
j10 X,Y
j11 X,Y
j12 X,Y
j9 X,Y
...全文
383 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
youzelin 2014-01-21
  • 打赏
  • 举报
回复
针对这个点结构,自定义一个类,然后 ArrayList 里面存放这个自定义类的对象的集合,这个不难吧?
lyx266 2014-01-21
  • 打赏
  • 举报
回复

        static void Main(string[] args)
        {
            List<Point> points = new List<Point>();
            points.Add(new Point() { Name = "j1", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j2", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j3", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j4", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j1", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j5", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j6", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j7", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j8", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j5", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j9", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j1", X = 1.0, Y = 1.0 });
            points.Add(new Point() { Name = "j9", X = 1.0, Y = 1.0 });
            List<List<Point>> listP = new List<List<Point>>();
            string name = "";
            List<Point> arrP=null;
            
            //遍历数组进行分组
            foreach (Point p in points)
            {
                if (name == "")
                {
                    name = p.Name;
                    arrP = new List<Point>();
                    listP.Add(arrP);
                    arrP.Add(p);
                    continue;
                }
                if (name != p.Name)
                {
                    arrP.Add(p);
                }
                else
                {
                    arrP.Add(p);
                    name = "";
                }

            }
            //显示结果
            foreach (List<Point> arr in listP)
            {
                Console.WriteLine("---------------------");
                foreach (Point p in arr)
                {
                    Console.Write(p.Name);
                }
                Console.WriteLine("");
            }
            Console.Read();
        }
    }

    public class Point
    {
        public string Name { get; set; }
        public double X { get; set; }
        public double Y { get; set; }
    }
leoleo4 2014-01-21
  • 打赏
  • 举报
回复
个人觉得 Dictionary 比较好。
xwj 2014-01-21
  • 打赏
  • 举报
回复
高手啊!坐等学习
Wx_Michelle 2014-01-21
  • 打赏
  • 举报
回复
想知道。。。
siemens_chang 2014-01-21
  • 打赏
  • 举报
回复
用XML
t101lian 2014-01-20
  • 打赏
  • 举报
回复
好复杂,只能帮顶,坐等大侠
gz5182009 2014-01-20
  • 打赏
  • 举报
回复
j1 X,Y j2 X,Y j3 X,Y j4 X,Y j1 X,Y j5 X,Y j6 X,Y j7 X,Y j8 X,Y j5 X,Y j9 X,Y j10 X,Y j11 X,Y j12 X,Y j9 X,Y 这堆数 j1 j2 j3 j4 j1第一个数组j5 j6 j7 j8 j5第二个数组j9 j10 j11 j12 j9第三个数组
gz5182009 2014-01-20
  • 打赏
  • 举报
回复
引用 3 楼 bjf814 的回复:
 static void Main(string[] args)
        {
            //申明测试数据
            List<Tuple<string, int, int>> list = new List<Tuple<string, int, int>>(){
            new Tuple<string, int, int>("j1", 198, 97),
            new Tuple<string, int, int>("j3", 198, 97),
            new Tuple<string, int, int>("j2", 198, 97),
            new Tuple<string, int, int>("j4", 198, 97),
            new Tuple<string, int, int>("j5", 198, 97)
            };
            //给数据排序
            list = list.OrderBy(a => a.Item1).ToList();

            foreach (var item in list)
            {
                Console.WriteLine(item.Item1);
            }
            Console.ReadKey();
        }
好像不怎么对吧。。。。 这样只生成了一个数组啊。。。 我写的数据至少会生成3个的。。。
gz5182009 2014-01-20
  • 打赏
  • 举报
回复
引用 2 楼 wyd1520 的回复:
有好的方法么。。。 我用ArrayList最后有些问题。。。
NotNull 2014-01-20
  • 打赏
  • 举报
回复
 static void Main(string[] args)
        {
            //申明测试数据
            List<Tuple<string, int, int>> list = new List<Tuple<string, int, int>>(){
            new Tuple<string, int, int>("j1", 198, 97),
            new Tuple<string, int, int>("j3", 198, 97),
            new Tuple<string, int, int>("j2", 198, 97),
            new Tuple<string, int, int>("j4", 198, 97),
            new Tuple<string, int, int>("j5", 198, 97)
            };
            //给数据排序
            list = list.OrderBy(a => a.Item1).ToList();

            foreach (var item in list)
            {
                Console.WriteLine(item.Item1);
            }
            Console.ReadKey();
        }
本拉灯 2014-01-20
  • 打赏
  • 举报
回复
gz5182009 2014-01-20
  • 打赏
  • 举报
回复
高手帮忙看一下啊。。。
md5e 2014-01-20
  • 打赏
  • 举报
回复
有一个东东叫“字典”
卧_槽 2014-01-20
  • 打赏
  • 举报
回复
很多时候,你们的问题都不是程序如何写,而是先把舌头捋直了。
lzw099 2014-01-20
  • 打赏
  • 举报
回复
没明白,
  • 打赏
  • 举报
回复
上面的方法,就可以让你按照 起止(j1-j1、j2-j2·····) 进行分类了。
  • 打赏
  • 举报
回复
 List<Tuple<string, int, int>> list = new List<Tuple<string, int, int>>(){
            new Tuple<string, int, int>("j1", 198, 97),
            new Tuple<string, int, int>("j3", 198, 97),
            new Tuple<string, int, int>("j2", 198, 97),
            new Tuple<string, int, int>("j4", 198, 97),
            new Tuple<string, int, int>("j5", 198, 97),
             new Tuple<string, int, int>("j1", 198, 97),
            new Tuple<string, int, int>("j6", 198, 97),
            new Tuple<string, int, int>("j7", 198, 97),
            new Tuple<string, int, int>("j8", 198, 97),
            new Tuple<string, int, int>("j6", 198, 97)
            };

            int start = list.IndexOf(list.First(l => l.Item1 == "j1"));
            int end = list.LastIndexOf(list.First(l => l.Item1 == "j1"));

            for (int i = start; i <= end; i++)
                Console.WriteLine(list[i]);
引用 5 楼 gz5182009 的回复:
[quote=引用 3 楼 bjf814 的回复:]
 static void Main(string[] args)
        {
            //申明测试数据
            List<Tuple<string, int, int>> list = new List<Tuple<string, int, int>>(){
            new Tuple<string, int, int>("j1", 198, 97),
            new Tuple<string, int, int>("j3", 198, 97),
            new Tuple<string, int, int>("j2", 198, 97),
            new Tuple<string, int, int>("j4", 198, 97),
            new Tuple<string, int, int>("j5", 198, 97)
            };
            //给数据排序
            list = list.OrderBy(a => a.Item1).ToList();

            foreach (var item in list)
            {
                Console.WriteLine(item.Item1);
            }
            Console.ReadKey();
        }
好像不怎么对吧。。。。 这样只生成了一个数组啊。。。 我写的数据至少会生成3个的。。。[/quote]
小猪八Q 2014-01-20
  • 打赏
  • 举报
回复
使用GroupBy方法进行分类 var result = list.GroupBy(p => p.No);
NotNull 2014-01-20
  • 打赏
  • 举报
回复
是不是键一样的?那就得用GroupBY
加载更多回复(6)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧