gpt4 book ai didi

c# - 仅基于子字符串过滤列表<字符串>

转载 作者:行者123 更新时间:2023-11-30 14:22:32 25 4
gpt4 key购买 nike

我有一个 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 个字符。因此,字典顺序与数字顺序相同。

关于c# - 仅基于子字符串过滤列表<字符串>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49140115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com