asp.net(c#)2.0 开发webform先贴一下我的代码:
 public bool IsInDD(string DD)
    {
        bool SS = Array.BinarySearch<string>(_DD, DD) >= 0;
        return SS;
    }
其中_DD是字符串数组.假设前提:_DD中包含有一个值与DD相等我断点调试的时候,发现一个奇怪的问题:如果_DD中的值的数量比较少,那么SS的值为TRUE,如果_DD中的值的数量比较多(10个以上),那么SS就为FALSE了有人能帮我解释一下这个现象吗???我想要实现的功能是: 如果_DD中含有一个值与DD相等,那么返回TRUE,请问代码怎么改?关注^^^^

解决方案 »

  1.   


    LZ:1、Array.BinarySearch<string>(_DD, DD),这个有人能为我解释吗?我断点调试了一下,发现如果当_DD中的值比较多的时候,即使DD的值存在于_DD中,那么返回的却是-1,而不是对应的索引
    2、查找某个值是否存在于数组中,笨点的办法是,手写循环来比较。有更好的办法否?C#中没有提供这种类型的函数?
      

  2.   

    //没看到你的传入值,可能原因很多,如没排序,没区分大小写,需要实现IComparer的部分没有实现等
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;namespace StrEdit
    {
        class Program
        {
            protected static bool SearchStr()
            {
                string[] _DD = new string[100];
                for (int i = 0; i < 100;i++ )
                {
                    _DD[i] = i.ToString();
                }
                _DD[50] = "AA";            
                string DD = "85";
                bool SS = Array.BinarySearch<string>(_DD, DD) >= 0;
                DD = "aa";
                //数组排序的方法需自己实现
                SS = Array.BinarySearch<string>(_DD, DD) >= 0;            
                SS = Array.BinarySearch<string>(_DD, DD, new MyStringComparer()) >= 0;
                ArrayList strArray = new ArrayList();
                for (int i = 0; i < 100; i++)
                {
                    strArray.Add(i.ToString());
                }
                strArray[10]="AA";
                SS = strArray.BinarySearch("aa") >= 0;
                strArray.Sort();
                SS= strArray.BinarySearch("aa")>=0;
                SS = strArray.BinarySearch("aa", new MyStringListComparer()) >= 0;
                return SS;
            }        
            //不区分大小写的IComparer实现
            protected class MyStringComparer:System.Collections.Generic.IComparer<string>
            {
                public int Compare(string str1, string str2)
                {
                    return string.Compare(str1, str2, true);
                }
            }        protected class MyStringListComparer : System.Collections.IComparer
            {
                public int Compare(object str1, object str2)
                {
                    if(object.Equals(str1, str2))
                    {
                        return 0;
                    }
                    return string.Compare(str1.ToString(), str2.ToString(), true);
                }
            }
            static void Main(string[] args)
            {
                SearchStr();
            }
        }
    }
      

  3.   

    //没看到你的传入值,可能原因很多,如没排序,没区分大小写,需要实现IComparer的部分没有实现等
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;namespace StrEdit
    {
        class Program
        {
            protected static bool SearchStr()
            {
                string[] _DD = new string[100];
                for (int i = 0; i < 100;i++ )
                {
                    _DD[i] = i.ToString();
                }
                _DD[50] = "AA";            
                string DD = "85";
                bool SS = Array.BinarySearch<string>(_DD, DD) >= 0;
                DD = "aa";
                //数组排序的方法需自己实现
                SS = Array.BinarySearch<string>(_DD, DD) >= 0;            
                SS = Array.BinarySearch<string>(_DD, DD, new MyStringComparer()) >= 0;
                ArrayList strArray = new ArrayList();
                for (int i = 0; i < 100; i++)
                {
                    strArray.Add(i.ToString());
                }
                strArray[10]="AA";
                SS = strArray.BinarySearch("aa") >= 0;
                strArray.Sort();
                SS= strArray.BinarySearch("aa")>=0;
                SS = strArray.BinarySearch("aa", new MyStringListComparer()) >= 0;
                return SS;
            }        
            //不区分大小写的IComparer实现
            protected class MyStringComparer:System.Collections.Generic.IComparer<string>
            {
                public int Compare(string str1, string str2)
                {
                    return string.Compare(str1, str2, true);
                }
            }        protected class MyStringListComparer : System.Collections.IComparer
            {
                public int Compare(object str1, object str2)
                {
                    if(object.Equals(str1, str2))
                    {
                        return 0;
                    }
                    return string.Compare(str1.ToString(), str2.ToString(), true);
                }
            }
            static void Main(string[] args)
            {
                SearchStr();
            }
        }
    }这样看起来舒服点 跟踪下IComparer的实现就明白了