You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ合并对象列表中的String[]字段并去重?

使用LINQ合并并去重所有对象的tags字段

你可以用SelectMany配合Distinct一行搞定这个需求,代码比手动循环简洁得多,效率也不差:

var uniqueTags = productInfos.SelectMany(p => p.tags).Distinct().ToList();

代码说明:

  • SelectMany:把每个ProductInfo对象的tags数组"扁平化",将所有数组里的标签合并成一个连续的序列,省去了手动嵌套循环添加元素的步骤。
  • Distinct():自动剔除序列里的重复标签,内部会用哈希表记录已出现的元素,去重效率很高。
  • ToList():把最终的无重复序列转换成List<string>类型,和你原来的返回类型一致。

处理空值的健壮版写法

如果存在tags为null的ProductInfo对象,直接用上面的代码会抛出NullReferenceException,可以加个空值判断优化:

var uniqueTags = productInfos.SelectMany(p => p.tags ?? Array.Empty<string>()).Distinct().ToList();

完整示例代码

替换你原有的实现部分后,整体代码如下:

List<ProductInfo> productInfos = new List<ProductInfo>();
ProductInfo f1 = new ProductInfo();
f1.tags = new[] { "A","B","T","U"};
ProductInfo f2 = new ProductInfo();
f2.tags = new[] { "C","D","M","U" };
productInfos.Add(f1);
productInfos.Add(f2);

// LINQ实现
var uniqueTags = productInfos.SelectMany(p => p.tags).Distinct().ToList();

class ProductInfo
{
    public String[] tags;
}

这种写法在8000+对象的规模下完全适用,性能和手动循环相当,但代码可读性和维护性更好。

内容的提问来源于stack exchange,提问作者Mazzy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:15:40