加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 仅基于子字符串过滤列表

发布时间:2020-12-16 01:26:07 所属栏目:百科 来源:网络整理
导读:我有一个SKU列表(产品编号),需要根据非常具体的标准对其进行排序. SKU列表,例如: Liststring skuList = new Liststring(){ "SKU001040AA","SKU003010DED","SKU002010VEVW","SKU003040EEGE","SKU001020GEF"}; 每个SKU的结构如下: 前三个字符是填充符 第4-6
我有一个SKU列表(产品编号),需要根据非常具体的标准对其进行排序.

SKU列表,例如:

List<string> skuList = new List<string>()
{
    "SKU001040AA","SKU003010DED","SKU002010VEVW","SKU003040EEGE","SKU001020GEF"
};

每个SKU的结构如下:

>前三个字符是填充符
>第4-6个字符指的是SKU所属的组
>第7-9个字符是指SKU在其各自组中的优先级
>剩下的第10个字符是填充符

因此,列表中的第一个SKU属于组001,优先级为040.较低的数值具有较高的优先级.在这种情况下,030的优先级高于040.我的目标是过滤列表,以便仅保留其各自组中的最高优先级SKU.使用上面的列表作为参考,过滤后的列表将包含“SKU003010DED”,“SKU002010VEVW”和“SKU001020GEF”.过滤后的列表无需订购.它最终将被打包到JSON对象中并被发送出去.

我尝试过几种不同的方法,其中有几种似乎效率很低.在我看来,我可以使用现有的SKU格式轻松订购列表.之后,我认为可以使用Contains()方法来检查子串是否存在,但当然只能用于列表中的完整字符串…

skuList = skuList.OrderBy(x => x).ToList();
List<string> skuListFiltered = new List<string>();
foreach (var sku in skuList)
{
    //Unsure of the best approach to view substrings of skuList
    if (!skuList.Contains(sku.Substring(3,3)))
    {
        skuListFiltered.Add(sku);
    }
}

有没有办法以这种方式过滤这个列表,还是应该尝试一种完全不同的方法?

解决方法

处理过程如下:

>识别列表中的SKU组
>将每个SKU附加到其各自的组
>按优先顺序订购每个组内的SKU
>选择每个组中的顶部项目
>从分组结果中创建一个平面列表

以下是LINQ的使用方法:

var topPriority = skuList
    .GroupBy(sku => sku.Substring(3,3))
    .Select(g => g.OrderBy(sku => sku.Substring(6,3)).First())
    .ToList();

请注意,由于优先级为零填充,因此它们具有3个字符的相同长度.因此,词典排序与数字排序相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读