【问题标题】:ArrayList Search .netArrayList 搜索.net
【发布时间】:2011-01-07 01:38:25
【问题描述】:

以下是存储在我的arraylist中的数据格式。

A-Amsterdam
B- Brussels
C-Canada

如此等等。 我想通过只传递前几个字符直到'-'来搜索我的数组列表 因此,如果我有类似 AA-Test 之类的东西,那么我只想通过 'AA' 来检查它是否存在。

我知道我可以使用 contains 或 binarysearch,但它不符合我的目的,因为它们都比较对象。

有什么建议吗?? 谢谢

【问题讨论】:

    标签: vb.net search arraylist .net-1.1


    【解决方案1】:

    您可以通过创建自己的 IComparer 并将其传递给 BinarySearch 来解决此问题:

    public class StartsWithComparer : IComparer
    {
        public int Compare(Object x, Object y)
        {
            String left = x as String;
            String right = y as String;
    
            if (ReferenceEquals(left, right))
            {
                return 0;
            }
    
            if (ReferenceEquals(left, null))
            {
                return -1;
            }
    
            if (ReferenceEquals(right, null))
            {
                return 1;
            }
    
            return (x.StartsWith(y) || y.StartsWith(x)) ? 0 : x.CompareTo(y);
        }
    }
    

    稍后...

    myArrayList.Sort()
    myArrayList.BinarySearch("AA", new StartsWithComparer());
    

    【讨论】:

      【解决方案2】:

      您可能需要考虑数组列表的大小和您将要执行的查找次数:

      如果您的数据集中有大量元素(大型数组列表)或大量查找,您将需要使用二进制搜索等搜索算法

      如果数据足够大,您可以考虑将数据存储在一个哈希表中,该哈希表由您想要访问的前几个字符索引(在您的示例中为“AA”)。

      最后,对于较小的数组列表大小和大量查找,您可能会发现使用相同的比较器函数和线性搜索实际上性能更好。这已在此处进一步讨论:At which n does binary search become faster than linear search on a modern CPU?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-01
        • 1970-01-01
        • 2015-05-26
        • 2017-09-14
        • 2021-08-29
        相关资源
        最近更新 更多