首页 > 其他分享 >如何比较两个集合的差异?

如何比较两个集合的差异?

时间:2024-03-27 14:37:18浏览次数:17  
标签:return filePath 差异 StorageConfig var 如何 集合 Path

场景:在窗口关闭的时候(用户点击叉叉的时候),需要比较用户在当前页面是否有修改,如果有需要提示是否要保存,如果没有才能关闭页面。

两种解决方案:

已知集合:LstConfig(当前的集合)    _localLstConfig(在打开页面随即缓存的初始数据集合)

第一种:集合直接比较

public bool JudgeIsChanged()
{
    if(LstConfig is {Count :var newConfigCount} && _localLstConfig is {Count:var oldConfigCount})
    {
        if(newConfigCount != oldConfigCount){
            return true;
        }
        else //数量相同比较内容
        {
            var srGroup = LstConfig.Where(x=>!_localLstConfig.Any(o=>x.Name==o.Name 
            && x.IsEnabled==o.IsEnabled)).ToList();

            if(srGroup is {Count: >0 })
                return true;
            else 
                return false;
        }
    }
    else 
        return true;
}

第二种:集合转成字符文件保存,比较字符文件判断差异

/// <summary>
///     缓存目录
/// </summary>
private string _cachePath
{
    get
    {
        var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
            Path.GetFileName(Assembly.GetEntryAssembly()?.GetName().Name),
            @"Cache\ConfigJson");
        if (!Directory.Exists(path))
            Directory.CreateDirectory(path);
        return path;
    }
}

/// <summary>
///     记录配置信息
/// </summary>
private void RecordConfig()
{
    if (StorageConfig != null)
    {
        var filePath = Path.Combine(_cachePath, "StorageConfig");
        if (File.Exists(filePath))
            File.Delete(filePath);
        File.Create(filePath, Encoding.UTF8.GetBytes(StorageConfig.ToJson()));
    }
}

/// <summary>
///     读文件
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public string ReadFile(string filePath)
{
    var content = string.Empty;
    try
    {
        if (File.Exists(filePath))
        {
            using var fs = new FileStream(filePath, FileMode.Open);
            using var sr = new StreamReader(fs);
            content = sr.ReadToEnd();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    return content;
}

/// <summary>
///     判断是否更新
/// </summary>
/// <returns></returns>
public bool IsUpdate()
{
    if (StorageConfig != null)
    {
        var filePath = Path.Combine(_cachePath, "StorageConfig");
        var oldJson = ReadFile(filePath);
        var newJson = StorageConfig.ToJson();
        return oldJson != newJson;
    }
    return false;
}

 

标签:return,filePath,差异,StorageConfig,var,如何,集合,Path
From: https://www.cnblogs.com/moon-stars/p/18098629

相关文章

  • 大专毕业,我是如何从外卖员成为Android程序员的?
    前言那年,我大专计算机专业毕业,四处寻觅,找不到工作,于是开启了我的送外卖旅途。我骑着电动车走在马路上,看着风雨里空旷的四周,就好像我的人生亦是如此,空空如也。一次意外的偶然事件,我看见了这份《Android宝典》,想起我大学时候的计算机专业,我毅然决然拾起当年的专业,捡起这本《......
  • WPS二次开发系列:打印流程大突破!Android 如何一步获取WPS内文档
    前言当前市面上几乎所有的打印软件都支持WPS/微信/QQ/钉钉的文档进行打印,但是其实现方案均为需要引导用户进入对应的app选择分享或发送到打印app进行打印,其根本原因在于打印app无法直接获取到WPS/微信/QQ/钉钉等应用内的文档列表,且由于现有的android11之后的文件架构,更是无法......
  • 如何打造跨境电商平台?
    打造跨境电商平台是一个复杂且多步骤的过程,涉及市场分析、技术选型、平台搭建、产品上架、支付与物流集成以及运营策略等多个方面。以下是一个详细的跨境电商平台打造方案:第一点要确定好市场分析与定位,需要进行深入的市场研究,了解目标市场的消费者需求、消费习惯以及竞争状况......
  • 【数据库】如何利用Python中的petl将PostgreSQL中所有表的外键删除,迁移数据,再重建外键
    一、简介在数据库管理中,外键是一种重要的约束,用于确保数据的一致性和完整性。然而,在某些情况下,我们可能需要删除或修改外键。本文将介绍如何使用Python中的petl库将PostgreSQL中所有表的外键删除,迁移数据,并重新建立外键。二、安装petl和psycopg2首先,我们需要安装petl和psycopg2......
  • 【独立开发前线】Vol.19 独立开发产品应该如何定价,才能收益最大化
    产品如何定价,如何收费是一个影响很大的点。价格会直接影响转化率,也会影响你的收入。那么产品应该怎么定价才是最合理的呢?这里有这样几种方案给大家参考一下:在瑞幸出来之前,星巴克独占国内的咖啡市场。星巴克的咖啡并不便宜,价格都在30以上,那么瑞幸是如何杀出重围的呢?很重要的......
  • 什么是店铺定位?电商店铺风格该如何来定位?
    店铺定位通常指的是店铺的风格定位,一般来说要求一个企业在互联网平台上的电商店铺、企业官网、自媒体平台的官方账号等风格保持一致。这意味着,无论是在线上还是线下,企业都需要通过统一的设计风格来传达自己的品牌形象和价值观,不断加深消费者对企业产品或品牌的认知度。......
  • 什么是网站地图?网站地图该如何来制作?(SEO)
    网站地图是一个重要的SEO工具,它可以帮助搜索引擎蜘蛛程序程序更好地理解和抓取企业网站。当蜘蛛程序程序进入企业网站后,会首先查看robots文件,以确定是否允许访问企业网站。如果允许访问,蜘蛛程序程序就会查看根目录下是否有企业网站地图,如果根目录下有网站地图,就会根据地图......
  • 用 AI 给人生开挂的正确方式 - 在 AI 迅速进化的时代,我们应该如何不落伍
    作者:明明如月学长,CSDN博客专家,大厂高级Java工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。热门文章推荐:(1)《为什么很多人工作3年却只有1年经验?》(2)《一文掌握大模型提示词技巧:......
  • sensitive-word-admin v1.3.0 发布 如何支持敏感词控台分布式部署?
    拓展阅读sensitive-word-adminv1.3.0发布如何支持分布式部署?sensitive-word-admin敏感词控台v1.2.0版本开源sensitive-word基于DFA算法实现的高性能敏感词工具介绍更多技术交流业务背景如果我们的敏感词部署之后,不会变化,那么其实不用考虑这个问题。......
  • Java集合排序
    packagecom.example.demo;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;importjava.util.List;publicclassTestApp{/**Comparable是一个内部比较接口,通常对象需要内部排序时直接实现Comparator是一个外......