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个。改成输出结果为lefts 的第1个 div1 移动到centers的第2个。
.....
改下代码..

解决方案 »

  1.   

    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)
            {
    //lefts的第1个div1移动到centers的第2个。
    //lefts的第2个div10移动到lefts的第3个。
    //centers的第2个div6移动到lefts的第1个。
    //lefts的第3个div9移动到lefts的第2个。
                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.Select(x => new { x.id, x.value, x.order, pre = data1.Single(y => y.id == x.id) }).Where(x => x.pre.order != x.order || x.pre.value != x.value).OrderBy(x => x.id);
                foreach (var item in diff)
                    Console.WriteLine("{0}的第{1}个{2}移动到{3}的第{4}个。", item.pre.value, item.pre.order, item.id, item.value, item.order);
            }
        }
    }