gpt4 book ai didi

c# - 如何从对象列表中删除(通过 linq)重复项

转载 作者:行者123 更新时间:2023-12-03 20:56:02 25 4
gpt4 key购买 nike

我的主要对象有一个属性,它是一个标签列表

    [SharedCosmosCollection("shared")]
public class GlobalPageTemplate : ISharedCosmosEntity
{
/// <summary>
/// Id
/// </summary>
[JsonProperty("Id")]
public string Id { get; set; }

/// <summary>
/// Cosmos Entity name
/// </summary>
[CosmosPartitionKey]
public string CosmosEntityName { get; set; }

/// <summary>
/// Page name
/// </summary>
public string ExtractedPageName { get; set; }

/// <summary>
/// Site collection Template Name
/// </summary>
public string ExtractedSitecollectionTemplateName { get; set; }

/// <summary>
/// GlobalDesignTenantId
/// </summary>
public string ExtractedGlobalDesignTenantId { get; set; }

/// <summary>
/// Global design tenant site collection url
/// </summary>
public string ExtractedGlobalDesigntenantSiteCollectionUrl { get; set; }


/// <summary>
/// Page template picture Url
/// </summary>
public string PageTemplatePictureUrl { get; set; }

/// <summary>
/// Base64 image of the page template
/// </summary>
public string Base64Image { get; set; }

/// <summary>
/// Name of the template
/// </summary>
public string PageTemplateName { get; set; }


/// <summary>
/// Page sections
/// </summary>
public List<Section> Sections { get; set; }

/// <summary>
/// Tags
/// </summary>
public List<Tag> Tags { get; set; }
}

标签对象在这里:

 public class Tag : ISharedCosmosEntity
{
/// <summary>
/// Id
/// </summary>
[JsonProperty("Id")]
public string Id { get; set; }
/// <summary>
/// Tag name
/// </summary>
public string TagName { get; set; }
/// <summary>
/// cosmos entity name
/// </summary>
[CosmosPartitionKey]
public string CosmosEntityName { get; set; }
}

在我的 WebAPI 中,从前端,我可能会得到重复的标签,

如何在保存之前删除它们并留下干净的标签列表?

最佳答案

我能否建议将存储标签的数据结构更改为 HashSet ?如果是这样,您可以执行类似 this 的操作。 .

HashSet 是唯一元素的无序集合。一般在我们要防止在集合中放置重复元素时使用。与列表相比,HashSet 的性能要好得多。

本质上,您在初始化时向 HashSet 提供自定义 IEqualityComparer。

public class TagComparer : IEqualityComparer<Tag>
{
public bool Equals(Tag x, Tag y)
{
return x.Id.Equals(y.Id, StringComparison.InvariantCultureIgnoreCase);
}

public int GetHashCode(Tag obj)
{
return obj.Id.GetHashCode();
}
}

然后你可以做

HashSet<Tag> Tags = new HashSet<Tag>(new TagComparer());

一般来说,我总是尝试使用对手头问题有意义的数据结构。如果您知道您总是希望这个集合具有独特的元素,那么我建议您使用 HashSet。

如果您不能使用 HashSet 而想坚持使用列表,则可以在 Tags 列表上使用 linq 的 Distinct 方法并从上面传入 TagComparer 对象。

List<Tag> DistinctTagList = Tags.Distict(new TagComparer())

关于c# - 如何从对象列表中删除(通过 linq)重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59196220/

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