本帖最后由 caozhy 于 2012-10-16 18:21:33 编辑

解决方案 »

  1.   

    本帖最后由 caozhy 于 2012-10-16 19:00:24 编辑
      

  2.   

    回复1楼
    正则啊,佩服。佩服我贴出oldStr和newStr大概样式"{root:[{DivId:\"div1\",DivWidth:200,DivHeight:167,leftPosition:50,topPosition:34,DivParentId:\"lefts\"},{DivId:\"div10\",DivWidth:200,DivHeight:135,leftPosition:50,topPosition:208,DivParentId:\"lefts\"},{DivId:\"div9\",DivWidth:200,DivHeight:245,leftPosition:50,topPosition:350,DivParentId:\"lefts\"},{DivId:\"div8\",DivWidth:600,DivHeight:711,leftPosition:260,topPosition:34,DivParentId:\"centers\"},{DivId:\"div6\",DivWidth:600,DivHeight:551,leftPosition:260,topPosition:752,DivParentId:\"centers\"},{DivId:\"div3\",DivWidth:600,DivHeight:135,leftPosition:260,topPosition:1310,DivParentId:\"centers\"},{DivId:\"div5\",DivWidth:600,DivHeight:197,leftPosition:260,topPosition:1452,DivParentId:\"centers\"},{DivId:\"div4\",DivWidth:200,DivHeight:143,leftPosition:870,topPosition:34,DivParentId:\"rights\"},{DivId:\"div2\",DivWidth:200,DivHeight:135,leftPosition:870,topPosition:184,DivParentId:\"rights\"},{DivId:\"div7\",DivWidth:200,DivHeight:593,leftPosition:870,topPosition:326,DivParentId:\"rights\"}]}"你看看能帮我拼个正则吗?div1、div2...就相当于上面的1、2、3....  中间的lefts、centers、rights就相当于 a、b、c 
      

  3.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading.Tasks;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string oldStr = "{DivId:\"div1\",DivWidth:200,DivHeight:167,leftPosition:50,topPosition:34,DivParentId:\"lefts\"},{DivId:\"div10\",DivWidth:200,DivHeight:135,leftPosition:50,topPosition:208,DivParentId:\"lefts\"},{DivId:\"div9\",DivWidth:200,DivHeight:245,leftPosition:50,topPosition:350,DivParentId:\"lefts\"},{DivId:\"div8\",DivWidth:600,DivHeight:711,leftPosition:260,topPosition:34,DivParentId:\"centers\"},{DivId:\"div6\",DivWidth:600,DivHeight:551,leftPosition:260,topPosition:752,DivParentId:\"centers\"},{DivId:\"div3\",DivWidth:600,DivHeight:135,leftPosition:260,topPosition:1310,DivParentId:\"centers\"},{DivId:\"div5\",DivWidth:600,DivHeight:197,leftPosition:260,topPosition:1452,DivParentId:\"centers\"},{DivId:\"div4\",DivWidth:200,DivHeight:143,leftPosition:870,topPosition:34,DivParentId:\"rights\"},{DivId:\"div2\",DivWidth:200,DivHeight:135,leftPosition:870,topPosition:184,DivParentId:\"rights\"},{DivId:\"div7\",DivWidth:200,DivHeight:593,leftPosition:870,topPosition:326,DivParentId:\"rights\"}";
                iMove(oldStr);
            }        static void iMove(string oldStr)
            {
                var data1 = oldStr.Split(new string[] { "},{" }, StringSplitOptions.RemoveEmptyEntries).Select(x => new { id = Regex.Match(x, @"(?<=DivId:"")\w+?(?="")").Value, value = Regex.Match(x, @"(?<=DivParentId:"")\w+?(?="")").Value });
                foreach (var item in data1)
                    Console.WriteLine("{0}, {1}。", item.id, item.value);
            }
        }
    }div1, lefts。
    div10, lefts。
    div9, lefts。
    div8, centers。
    div6, centers。
    div3, centers。
    div5, centers。
    div4, rights。
    div2, rights。
    div7, rights。
    Press any key to continue . . .
      

  4.   

    是像上面那样输出来
    2移动到b的第1个。
    3移动到c的第2个。
    4移动到c的第1个。
    5移动到a的第2个。
    7移动到b的第2个。
    8移动到c的第3个。
    9移动到a的第3个。只不过,2、3、4... 换成 div1、div2... 麻烦了,帮我解决下
      

  5.   

    你把我第二个程序的正则代入第一个程序,然后增加一个预处理,把{root:[...]}去掉,程序就成了。
      

  6.   


    string oldStr = "{root:[{DivId:\"div1\",DivWidth:200,DivHeight:167,leftPosition:50,topPosition:34,DivParentId:\"lefts\"},{DivId:\"div10\",DivWidth:200,DivHeight:135,leftPosition:50,topPosition:208,DivParentId:\"lefts\"},{DivId:\"div9\",DivWidth:200,DivHeight:245,leftPosition:50,topPosition:350,DivParentId:\"lefts\"},{DivId:\"div8\",DivWidth:600,DivHeight:711,leftPosition:260,topPosition:34,DivParentId:\"centers\"},{DivId:\"div6\",DivWidth:600,DivHeight:551,leftPosition:260,topPosition:752,DivParentId:\"centers\"},{DivId:\"div3\",DivWidth:600,DivHeight:135,leftPosition:260,topPosition:1310,DivParentId:\"centers\"},{DivId:\"div5\",DivWidth:600,DivHeight:197,leftPosition:260,topPosition:1452,DivParentId:\"centers\"},{DivId:\"div4\",DivWidth:200,DivHeight:143,leftPosition:870,topPosition:34,DivParentId:\"rights\"},{DivId:\"div2\",DivWidth:200,DivHeight:135,leftPosition:870,topPosition:184,DivParentId:\"rights\"},{DivId:\"div7\",DivWidth:200,DivHeight:593,leftPosition:870,topPosition:326,DivParentId:\"rights\"}]}";
                string newStr = "{root:[{DivId:\"div6\",DivWidth:200,DivHeight:167,leftPosition:50,topPosition:34,DivParentId:\"lefts\"},{DivId:\"div9\",DivWidth:200,DivHeight:135,leftPosition:50,topPosition:208,DivParentId:\"lefts\"},{DivId:\"div10\",DivWidth:200,DivHeight:245,leftPosition:50,topPosition:350,DivParentId:\"lefts\"},{DivId:\"div8\",DivWidth:600,DivHeight:711,leftPosition:260,topPosition:34,DivParentId:\"centers\"},{DivId:\"div1\",DivWidth:600,DivHeight:551,leftPosition:260,topPosition:752,DivParentId:\"centers\"},{DivId:\"div3\",DivWidth:600,DivHeight:135,leftPosition:260,topPosition:1310,DivParentId:\"centers\"},{DivId:\"div5\",DivWidth:600,DivHeight:197,leftPosition:260,topPosition:1452,DivParentId:\"centers\"},{DivId:\"div4\",DivWidth:200,DivHeight:143,leftPosition:870,topPosition:34,DivParentId:\"rights\"},{DivId:\"div2\",DivWidth:200,DivHeight:135,leftPosition:870,topPosition:184,DivParentId:\"rights\"},{DivId:\"div7\",DivWidth:200,DivHeight:593,leftPosition:870,topPosition:326,DivParentId:\"rights\"}]}";
      

  7.   

    像你第一次给的代码一样的输出结果
    2移动到b的第1个。
    3移动到c的第2个。
    4移动到c的第1个。
    5移动到a的第2个。
    7移动到b的第2个。
    8移动到c的第3个。
    9移动到a的第3个。
    Press any key to continue . . .
    只不过  是 2、3、4、5、6、7、8、9换成 div1、2、3...   a、b、c换成lefts、centers、rights
    其他不变,辛苦了 caozhy
      

  8.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading.Tasks;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string oldStr = "{root:[{DivId:\"div1\",DivWidth:200,DivHeight:167,leftPosition:50,topPosition:34,DivParentId:\"lefts\"},{DivId:\"div10\",DivWidth:200,DivHeight:135,leftPosition:50,topPosition:208,DivParentId:\"lefts\"},{DivId:\"div9\",DivWidth:200,DivHeight:245,leftPosition:50,topPosition:350,DivParentId:\"lefts\"},{DivId:\"div8\",DivWidth:600,DivHeight:711,leftPosition:260,topPosition:34,DivParentId:\"centers\"},{DivId:\"div6\",DivWidth:600,DivHeight:551,leftPosition:260,topPosition:752,DivParentId:\"centers\"},{DivId:\"div3\",DivWidth:600,DivHeight:135,leftPosition:260,topPosition:1310,DivParentId:\"centers\"},{DivId:\"div5\",DivWidth:600,DivHeight:197,leftPosition:260,topPosition:1452,DivParentId:\"centers\"},{DivId:\"div4\",DivWidth:200,DivHeight:143,leftPosition:870,topPosition:34,DivParentId:\"rights\"},{DivId:\"div2\",DivWidth:200,DivHeight:135,leftPosition:870,topPosition:184,DivParentId:\"rights\"},{DivId:\"div7\",DivWidth:200,DivHeight:593,leftPosition:870,topPosition:326,DivParentId:\"rights\"}]}";
                string newStr = "{root:[{DivId:\"div6\",DivWidth:200,DivHeight:167,leftPosition:50,topPosition:34,DivParentId:\"lefts\"},{DivId:\"div9\",DivWidth:200,DivHeight:135,leftPosition:50,topPosition:208,DivParentId:\"lefts\"},{DivId:\"div10\",DivWidth:200,DivHeight:245,leftPosition:50,topPosition:350,DivParentId:\"lefts\"},{DivId:\"div8\",DivWidth:600,DivHeight:711,leftPosition:260,topPosition:34,DivParentId:\"centers\"},{DivId:\"div1\",DivWidth:600,DivHeight:551,leftPosition:260,topPosition:752,DivParentId:\"centers\"},{DivId:\"div3\",DivWidth:600,DivHeight:135,leftPosition:260,topPosition:1310,DivParentId:\"centers\"},{DivId:\"div5\",DivWidth:600,DivHeight:197,leftPosition:260,topPosition:1452,DivParentId:\"centers\"},{DivId:\"div4\",DivWidth:200,DivHeight:143,leftPosition:870,topPosition:34,DivParentId:\"rights\"},{DivId:\"div2\",DivWidth:200,DivHeight:135,leftPosition:870,topPosition:184,DivParentId:\"rights\"},{DivId:\"div7\",DivWidth:200,DivHeight:593,leftPosition:870,topPosition:326,DivParentId:\"rights\"}]}";
                iMove(Regex.Match(oldStr, @"{root:\[(.+)\]}").Groups[1].Value, Regex.Match(newStr, @"{root:\[(.+)\]}").Groups[1].Value);
            }        static void iMove(string oldStr, string newStr)
            {
                var data1 = oldStr.Split(new string[] { "},{" }, StringSplitOptions.None).Select(x => new { id = Regex.Match(x, @"(?<=DivId:"")\w+?(?="")").Value, value = Regex.Match(x, @"(?<=DivParentId:"")\w+?(?="")").Value }).GroupBy(x => x.value).SelectMany(x => x.Select((y, i) => new { y.id, y.value, order = i + 1 }));
                var data2 = newStr.Split(new string[] { "},{" }, StringSplitOptions.None).Select(x => new { id = Regex.Match(x, @"(?<=DivId:"")\w+?(?="")").Value, value = Regex.Match(x, @"(?<=DivParentId:"")\w+?(?="")").Value }).GroupBy(x => x.value).SelectMany(x => x.Select((y, i) => new { y.id, y.value, order = i + 1 }));
                var diff = data2.Where(x => data1.Single(y => y.id == x.id).order != x.order || data1.Single(y => y.id == x.id).value != x.value).OrderBy(x => x.id);
                foreach (var item in diff)
                    Console.WriteLine("{0}移动到{1}的第{2}个。", item.id, item.value, item.order);
            }
        }
    }div1移动到centers的第2个。
    div10移动到lefts的第3个。
    div6移动到lefts的第1个。
    div9移动到lefts的第2个。
    Press any key to continue . . .
      

  9.   

    在此,衷心感谢 caozhy 认真耐心的帮忙解决这个问题.
         祝愿 caozhy 家庭和美、健康快乐