组A:
Auchindoun US-Horde 16802
Azgalor US-Alliance 8932
Azjol-Nerub US-Alliance 5983
Azjol-Nerub US-Horde 9172
Azshara US-Alliance 19400
Azshara US-Horde 17229
组B:
Azjol-Nerub US-Alliance 22583
Azjol-Nerub US-Horde 2212
Azshara US-Alliance 1400
问题是:如何对比出组B中的名字在组A中存在,并且算出他们的差额。注意的是这都是字符串,,我不想通过存进数据库然后作对比。。有什么好的方法?

解决方案 »

  1.   

    你可以用字符串分割方法Split(' ')
    然后在比较
      

  2.   

        protected void Page_Load(object sender, EventArgs e)
        {
            string[] AA = new string[]{"Auchindoun US-Horde 16802", "Azgalor US-Alliance 8932",
            "Azjol-Nerub US-Alliance 5983","Azjol-Nerub US-Horde 9172" ,"Azshara US-Alliance 19400","Azshara US-Horde 17229" };
            string[] BB = new string[] { "Azjol-Nerub US-Alliance 22583", "Azjol-Nerub US-Horde 2212", "Azshara US-Alliance 1400" };        int[] ret=Sub(BB, AA);计算差值
            for (int j = 0; j < ret.Length; j++)
            {
                Response.Write(ret[j].ToString()+"---");//输出结果
            }
        }
        protected int[] Sub(string[] BB,string[] AA)
        {
            int[] result=new int[BB.Length];
            for (int j = 0; j < BB.Length; j++)
            {
                string a1 = BB[j].Substring(0, BB[j].LastIndexOf(' '));
                int a2 = int.Parse(BB[j].Substring(BB[j].LastIndexOf(' ') + 1, BB[j].Length - BB[j].LastIndexOf(' ') - 1));
                for (int i = 0; i < AA.Length; i++)
                {
                    string b1 = AA[i].Substring(0, AA[i].LastIndexOf(' '));
                    int b2 = int.Parse(AA[i].Substring(AA[i].LastIndexOf(' ') + 1, AA[i].Length - AA[i].LastIndexOf(' ') - 1));
                    if (a1 == b1)
                    {
                        int s = a2 - b2;
                        result[j]= s > 0 ? s : -s;
                    }
                }
            }
            return result;
        }
      

  3.   

    6楼的方法我很好但是,,我可能说的不清楚。。因为我是要整个字符串数组作比较的, string[] AA = new string[]{"Auchindoun US-Horde 16802", "Azgalor US-Alliance 8932",
            "Azjol-Nerub US-Alliance 5983","Azjol-Nerub US-Horde 9172" ,"Azshara US-Alliance 19400","Azshara US-Horde 17229" };
            string[] BB = new string[] { "Azjol-Nerub US-Alliance 22583", "Azjol-Nerub US-Horde 2212", "Azshara US-Alliance 1400" };
    这样要手写进去,不行。。假如我组B的数据有几百条呢?
      

  4.   


    string arrA="Auchindoun US-Horde 16802\r\n
    Azgalor US-Alliance 8932\r\n
    Azjol-Nerub US-Alliance 5983\r\n
    Azjol-Nerub US-Horde 9172\r\n
    Azshara US-Alliance 19400\r\n
    Azshara US-Horde 17229"string arrB="Azjol-Nerub US-Alliance 22583\r\n
    Azjol-Nerub US-Horde 2212\r\n 
    Azshara US-Alliance 1400"
    foreach(string a in arrA.Split(new string[]{"\r\n"},StringSplitOptions.RemoveEmptyEntries)
    {
    string aname="";
    int aprice=0;
    GetNameAndPrice(a,out aname,out aprice);
    foreach(string b in arrB.Split(new string[]{"\r\n"},StringSplitOptions.RemoveEmptyEntries)
    {
    string bname="";
    int bprice=0;
    GetNameAndPrice(a,out bname,out bprice);
    if(aname==bname)
    Console.WriteLine(bname+"差额是"+(bprice-aprice).ToString());
    }
    }
    private void GetNameAndPrice(string str,out string name,out int price)
    {
    name="";
    price=0;
    string[] item=str.Split(' ');
    name=item[0]+" "+item[1];
    price=int.Parse(item[2]);
    }
      

  5.   

    晕。发觉真难说清楚说说我的具体需求吧。
    我要在一个网站上获取一堆数据出来,这个网:http://www.103303226.cn/  我就截取一部分数据吧:
    1 Aegwynn - Alliance 10492 
    2 Aegwynn - Horde 27756 
    3 Aerie Peak - Alliance 30630 
    4 Aerie Peak - Horde 38930 
    5 Agamaggan - Horde 577 
    6 Aggramar - Alliance 14430 
    7 Akama - Alliance 26508 
    8 Akama - Horde 1366 
    9 Alexstrasza - Alliance 228 
    10 Alexstrasza - Horde 27024 
    这个是直接从网站复制下来的,我要对比的时候也是要整个复制粘贴进去。
    其实我发觉我是不会把这堆字符分别拆开成Aegwynn - Alliance 10492  ,Aegwynn - Horde 27756 ,Aerie Peak - Alliance 30630 (后面省略) 只要拆开了就可以存到hashtable进去,后面我就会处理了!
      

  6.   

    8楼的可以解析下arrA.Split(new string[]{"\r\n"},StringSplitOptions.RemoveEmptyEntries)是什么意思吗?
      

  7.   

    将数据拆开至Hashtable里:            string[] AA = new string[]{"Auchindoun US-Horde 16802", "Azgalor US-Alliance 8932",
            "Azjol-Nerub US-Alliance 5983","Azjol-Nerub US-Horde 9172" ,"Azshara US-Alliance 19400","Azshara US-Horde 17229" };
                string[] BB = new string[] { "Azjol-Nerub US-Alliance 22583", "Azjol-Nerub US-Horde 2212", "Azshara US-Alliance 1400" };
                Hashtable ht = new Hashtable();
                Hashtable ht1 = new Hashtable();
                for (int i = 0; i < AA.Length; i++)
                {
                    //AA[i] = AA[i].Replace(' ', '|');
                    ht.Add(AA[i].Split(' ')[0] + AA[i].Split(' ')[1], AA[i].Split(' ')[2]);
                }
                for (int j = 0; j < BB.Length; j++)
                {
                    ht1.Add(BB[j].Split(' ')[0] + BB[j].Split(' ')[1], BB[j].Split(' ')[2]);
                }
      

  8.   

    对了。如何把这个Arathor US-Alliance 18000拆开成两个就是Arathor US-Alliance 和18000
      

  9.   

    Dictionary<string, string> dic= new Dictionary<int, string>(); 
    Dictionary<string, string> dic2= new Dictionary<int, string>(); 
    string strA="Auchindoun US-Horde 16802
    Azgalor US-Alliance 8932
    Azjol-Nerub US-Alliance 5983
    Azjol-Nerub US-Horde 9172
    Azshara US-Alliance 19400
    Azshara US-Horde 17229"
    string strA="Azjol-Nerub US-Alliance 22583
    Azjol-Nerub US-Horde 2212 
    Azshara US-Alliance 1400"
    foreach(string a in strA.Split(new string[]{"\r\n"},StringSplitOptions.RemoveEmptyEntries)//根据回车换行分割串
    {
     
     dic.Add(a.Split(new char[1]{''})[0]+a.Split(new char[1]{''})[1],a.Split(new char[1]{''})[2]))
    }
    foreach(string a in strB.Split(new string[]{"\r\n"},StringSplitOptions.RemoveEmptyEntries)
    {
     dic2.Add(a.Split(new char[1]{''})[0]+a.Split(new char[1]{''})[1],a.Split(new char[1]{''})[2]))
    } foreach (KeyValuePair<string, string> kvp in dic2)
        {
           if(dic.ContainsKey(kvp.Key))
               {
                  dic[kvp.Key]=(int)dic[kvp.Key]-int.Parse(kvp.Value)
               }
        }
      

  10.   

    foreach(string a in strA.Split(new string[]{"\r\n"},StringSplitOptions.RemoveEmptyEntries))
    { } 
    foreach(string a in strB.Split(new string[]{"\r\n"},StringSplitOptions.RemoveEmptyEntries)) 
    { } 
      

  11.   

    11L的代码就可以。。
    根据空格分隔:string str="Arathor US-Alliance 18000";
    string s1=str.split(' ')[0]+" "+str.split(' ')[1]'  //Arathor US-Alliance
    string s2=str.split(' ')[2]  //18000