none
ArrayList 问题 RRS feed

  • 问题

  • 有一个ArrayList,里面的值形式为:
    表名1/列名1
    表名1/列名2
    表名1/列名3
    表名2/列名1
    表名2/列名2
    表名3/列名1
    表名3/列名2
    .
    .
    .
    表名n/列名n1
    表名n/列名n2

    现在我要重新得到一组数据,形式为:
    表名1/列名1,2,3
    表名2/列名1,2
    表名3/列名1,2
    .
    .
    .
    表名n/列名n1,n2

    请问该怎么实现,谢谢!

    2010年4月23日 7:12

答案

  • 你好,

    说实话你上面贴出的代码我没看很明白。不过你最开始提问倒是很清楚。

    你可以试试下面这种方法:

    1.新定义一个Dictionary,假设名字为dic,用来保存新值。

    e.g.

      System.Collections.Generic.Dictionary<string, string> dic = new System.Collections.Generic.Dictionary<string, string>();

    2.循环遍历第一个arraylist,如果所有值都是这么有规律,你可以把表明作为dic的key 名字。

    3.每次取出第一个arraylist的每一项的值时,用strng.split()方法把它的值分成两个string,一个就是表明,另外一个是列名。

    4.检查dic是否包含这个key:

    dic.ContainsKey("表名")

    5.如果包含,则看列名是否与当前key对应的value(列名)相等,不相等,则把该列列名与当前列名合并成你要的字符串形式。

     dic["表名"] = "列名字符串" + "列名";

    如果不包含这个表名,则把它添加到dic,

    dic.Add("表名","列名"); 
    我觉得可能用Dictionary来保存新的内容可能更合适点。
    Microsoft Online Community Support
    2010年4月26日 4:39

全部回复

  • 我不知道有没有理解错你的意思,你是要将在相同表名的列合并到一块吧,可以看下你的ArrayList是怎么定义的么?最好能将关于ArrayList的code贴一下,谢谢。 参照ArrayList提供的方法(msdn:http://msdn.microsoft.com/zh-cn/library/system.collections.arraylist_methods.aspx),并未提供关于你需求的方法。
    • 已编辑 络绎 2010年4月23日 7:46 Add more messages
    2010年4月23日 7:42
  • 恩,你的理解没错,就是想把一张表的表名和它的所有的列合在一起。

    对比两个数据库中主键的不同:

    public ArrayList ListLackPriKey(Database TargetDB, Database SourceDB, string TableName)
            {
                ArrayList TargetAryLst = new ArrayList();
                ArrayList SourceAryLst = new ArrayList();

                TableManager TbMg = new TableManager();
                TargetAryLst = TbMg.ListPriKeyName(TargetDB, TableName);
                SourceAryLst = TbMg.ListPriKeyName(SourceDB, TableName);

                ArrayList DifAryLst = new ArrayList();

                foreach (string s in SourceAryLst)
                {
                    if (!TargetAryLst.Contains(s))
                    {
                        DifAryLst.Add(TableName + "/" + s);
                    }
                }
                return DifAryLst;
            }

     

    这样列出了两个数据库的同一张表缺少的主键列,修改数据库的时候如果有多个主键列的话,要一起设置,所以得把某张表所缺少的所有主键列都列出来,不知道该怎么做,还请指教,谢谢。

    2010年4月23日 8:31
  • 看你的源代码,分别获取了target 和 source 的 tableName,然后查看target中是否有source,若无则加到diff中。这个函数的功能获取的是source有而target无的tableName?我觉得这种做法不可能达到你想要的效果“列出了两个数据库的同一张表缺少的主键列”。

    根据你的需求,要做两个步骤的工作:

    1)找出target 和 source中具有相同表名的表;【这步你做了】

    2)合并这些表的所有列。而事实上,你仅仅是拿出了表名,没有列,因此也没法找到缺失的主键列。

    昨天论坛的一篇帖子,我觉得应该可以解决你的问题:

    http://social.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/54d52aa6-6d35-48df-bb9d-892e7cd00122

    • 已编辑 络绎 2010年4月23日 13:18 Add more informations
    • 已标记为答案 KeFang Chen 2010年4月29日 6:25
    • 取消答案标记 KeFang Chen 2010年4月29日 6:26
    2010年4月23日 9:53
  • 你好,

    说实话你上面贴出的代码我没看很明白。不过你最开始提问倒是很清楚。

    你可以试试下面这种方法:

    1.新定义一个Dictionary,假设名字为dic,用来保存新值。

    e.g.

      System.Collections.Generic.Dictionary<string, string> dic = new System.Collections.Generic.Dictionary<string, string>();

    2.循环遍历第一个arraylist,如果所有值都是这么有规律,你可以把表明作为dic的key 名字。

    3.每次取出第一个arraylist的每一项的值时,用strng.split()方法把它的值分成两个string,一个就是表明,另外一个是列名。

    4.检查dic是否包含这个key:

    dic.ContainsKey("表名")

    5.如果包含,则看列名是否与当前key对应的value(列名)相等,不相等,则把该列列名与当前列名合并成你要的字符串形式。

     dic["表名"] = "列名字符串" + "列名";

    如果不包含这个表名,则把它添加到dic,

    dic.Add("表名","列名"); 
    我觉得可能用Dictionary来保存新的内容可能更合适点。
    Microsoft Online Community Support
    2010年4月26日 4:39