使用 StartsWith 从另一个列表更新一个列表的项目的最快方法

吉特德·夏尔马

我有一个场景,我需要根据另一个列表中的数据更新几个项目。我已经在这里解决了各种问题,但没有任何帮助。

设想

listA:总计数约为 88000

public class CDRs
 {
    public string cld { get; set; }
    public string prefix2 { get; set; }
    public string country { get; set; }
    public string city { get; set; }
 }

listB:总计数:3000。

public class RatesVM
    {
        public string prefix { get; set; }
        public string Country { get; set; }
        public string City { get; set; }
    }

现在,在数组listB可以有多个匹配listA的字段是CLD

例如。listA.cld = "8801123232"; 我从 ListB 得到的匹配前缀是

880     BGD Proper
8801    BGD Mobile
88011   BGD Dhaka Mobile
88017   BGD Dhaka Mobile
88018   BGD Dhaka Mobile
88019   BGD Dhaka Mobile

现在我想要在这种情况下最接近的匹配

88011   BGD Dhaka Mobile

我现在正在遵循的方法。

foreach (var x in listA)
            {
                var tempObj = listB.FirstOrDefault(y => x.cld.StartsWith(y.prefix));
                if (tempObj != null)
                {
                    x.prefix2 = tempObj.prefix;
                    x.country = tempObj.Country;
                    x.city = tempObj.City;
                }
                else
                {
                    x.prefix2 = "InBound";
                    x.country = "Unknown";
                    x.city = "Unknown";
                }
            }

它工作正常,但需要很多时间。对于这种情况,大约需要 2-3 分钟

很少有情况下 ListA 会有大约 100 万条记录。我担心它会永远持续下去。

提前谢谢了

微博

我会建议下面的代码。关键的区别在于使用orderedListB以确保您获得最具体的匹配(即首先从最长的前缀开始),以及Dictionary缓存结果。*

Dictionary<string, RatesVM> cache = new Dictionary<string, RatesVM>();
var orderedListB = listB.OrderByDescending(z => z.prefix.Length).ToList();

foreach (var x in listA)
{
    RatesVM cached;
    cache.TryGetValue(x.cld, out cached);
    var tempObj = cached ?? orderedListB.FirstOrDefault(z => x.cld.StartsWith(z.prefix));

    if (tempObj != null)
    {
        if (cached == null)
        {
            cache.Add(x.cld, tempObj);
        }

        x.prefix2 = tempObj.prefix;
        x.country = tempObj.Country;
        x.city = tempObj.City;
    }
    else
    {
        x.prefix2 = "InBound";
        x.country = "Unknown";
        x.city = "Unknown";
    }
}

您可能还想考虑使用Parallel.ForEach而不仅仅是 foreach。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#中,如何使用另一个列表的StartsWith()条件过滤列表?

来自分类Dev

使用F#减少基于另一个列表的列表的最快方法

来自分类Dev

如何使用contextMenu从列表视图中将值传递给项目的另一个活动

来自分类Dev

使用另一个列表修改列表

来自分类Dev

在另一个项目的xhtml中使用一个项目中的bean

来自分类Dev

使用一个列表替换另一个列表中的值

来自分类Dev

使用linq从另一个列表获取的索引值过滤一个列表

来自分类Dev

Applescript:使用一个列表淘汰另一个列表

来自分类Dev

使用WPF将一个列表与另一个列表绑定

来自分类Dev

Python使用另一个列表中的元素过滤出一个列表

来自分类Dev

使用另一个列表值的键动态获取一个列表值

来自分类Dev

Applescript:使用一个列表淘汰另一个列表

来自分类Dev

使用jQuery将一个列表替换为另一个列表

来自分类Dev

使用一个列表替换另一个列表中的值

来自分类Dev

使用“ while”从另一个列表中删除一个列表中的元素

来自分类Dev

使用一个列表对另一个列表进行排序

来自分类Dev

在蟒蛇中。使用一个列表的格式到另一个列表

来自分类Dev

如何使用 Linq 将一个列表投影到另一个列表?

来自分类Dev

Python使用布尔值为列表中的每个项目返回一个列表,该列表与另一个列表相同

来自分类Dev

渲染另一个列表并使用变量

来自分类Dev

json_query使用contains在另一个列表中搜索项目失败

来自分类Dev

如何使用另一个项目中填充的列表

来自分类Dev

如何使用另一个 Observable 的值操作来自 Observable 的项目列表

来自分类Dev

使用列表基于另一个更新数据框的列

来自分类Dev

使用 jquery 从另一个 <select multiple> 更新 <select> 列表

来自分类Dev

如果使用按钮将项目添加到列表中,如何在另一个按钮中使用更新后的列表?

来自分类Dev

如何使用for循环一次将一个列表中的项目追加到另一个列表中?

来自分类Dev

使用jQuery或JS(owl-carousel)给一个项目归类为另一个项目的子项

来自分类Dev

使用Selenium选择自动完成列表-在访问另一个列表之前必须关闭一个列表

Related 相关文章

  1. 1

    在C#中,如何使用另一个列表的StartsWith()条件过滤列表?

  2. 2

    使用F#减少基于另一个列表的列表的最快方法

  3. 3

    如何使用contextMenu从列表视图中将值传递给项目的另一个活动

  4. 4

    使用另一个列表修改列表

  5. 5

    在另一个项目的xhtml中使用一个项目中的bean

  6. 6

    使用一个列表替换另一个列表中的值

  7. 7

    使用linq从另一个列表获取的索引值过滤一个列表

  8. 8

    Applescript:使用一个列表淘汰另一个列表

  9. 9

    使用WPF将一个列表与另一个列表绑定

  10. 10

    Python使用另一个列表中的元素过滤出一个列表

  11. 11

    使用另一个列表值的键动态获取一个列表值

  12. 12

    Applescript:使用一个列表淘汰另一个列表

  13. 13

    使用jQuery将一个列表替换为另一个列表

  14. 14

    使用一个列表替换另一个列表中的值

  15. 15

    使用“ while”从另一个列表中删除一个列表中的元素

  16. 16

    使用一个列表对另一个列表进行排序

  17. 17

    在蟒蛇中。使用一个列表的格式到另一个列表

  18. 18

    如何使用 Linq 将一个列表投影到另一个列表?

  19. 19

    Python使用布尔值为列表中的每个项目返回一个列表,该列表与另一个列表相同

  20. 20

    渲染另一个列表并使用变量

  21. 21

    json_query使用contains在另一个列表中搜索项目失败

  22. 22

    如何使用另一个项目中填充的列表

  23. 23

    如何使用另一个 Observable 的值操作来自 Observable 的项目列表

  24. 24

    使用列表基于另一个更新数据框的列

  25. 25

    使用 jquery 从另一个 <select multiple> 更新 <select> 列表

  26. 26

    如果使用按钮将项目添加到列表中,如何在另一个按钮中使用更新后的列表?

  27. 27

    如何使用for循环一次将一个列表中的项目追加到另一个列表中?

  28. 28

    使用jQuery或JS(owl-carousel)给一个项目归类为另一个项目的子项

  29. 29

    使用Selenium选择自动完成列表-在访问另一个列表之前必须关闭一个列表

热门标签

归档