C#,VB.NET数组去重复,提取键名和重复键和非重复键

vb.net 输入字符串数组,得到不重复的数据,有重复的键,无重复的键

比如,a,a,b,b,c; 不重复的键=a,b,c 有重复的键=a,b 无重复的键=c ,回这3个数组

在VB.NET中,可以通过以下方法实现字符串数组的去重及分类处理:

方法实现

  1. 使用LINQ的Distinct方法获取不重复数据集合‌1
  2. 通过GroupBy分组统计重复次数,筛选出重复键和非重复键‌1
  3. 利用字典进行高效数据分类‌1

vbnet_数组去重分类,功能说明

  1. 核心方法‌:ClassifyArray函数接收字符串数组,返回包含三个分类的元组1
  2. 去重处理‌:使用LINQ的Distinct方法获取唯一值集合1
  3. 频率统计‌:通过GroupBy创建元素出现次数字典
  4. 分类逻辑‌:根据出现次数将元素分为重复键和非重复键两类1
  5. 输出示例‌:输入{"a","a","b","b","c"}将输出分类结果

C#代码示例

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;

class ArrayClassifier
{
    public static void ClassifyArray(string[] arr, 
                                   out string[] allKeys, 
                                   out string[] duplicateKeys, 
                                   out string[] nonDuplicateKeys)
    {
        // 获取所有唯一键
        var uniqueItems = arr.Distinct().ToArray();
        allKeys = uniqueItems;

        // 统计元素出现次数
        var countDict = arr.GroupBy(x => x)
                          .ToDictionary(g => g.Key, g => g.Count());

        // 分类处理
        var dupList = new List<string>();
        var nonDupList = new List<string>();

        foreach (var key in uniqueItems)
        {
            if (countDict[key] > 1)
                dupList.Add(key);
            else
                nonDupList.Add(key);
        }

        duplicateKeys = dupList.ToArray();
        nonDuplicateKeys = nonDupList.ToArray();
    }

    static void Main(string[] args)
    {
        string[] testArray = { "a", "a", "b", "b", "c" };
        string[] all, duplicates, nonDuplicates;

        ClassifyArray(testArray, out all, out duplicates, out nonDuplicates);

        Console.WriteLine($"所有键: {string.Join(",", all)}");
        Console.WriteLine($"有重复的键: {string.Join(",", duplicates)}");
        Console.WriteLine($"无重复的键: {string.Join(",", nonDuplicates)}");
    }
}

VB.NET实现的字符串数组分类函数,根据用户需求返回三个分类数组:vb_数组分类

vbnet 复制代码
Module ArrayClassifier
    Public Sub ClassifyArray(ByVal arr As String(), 
                           ByRef 所有键 As String(), 
                           ByRef 有重复的键 As String(), 
                           ByRef 无重复的键 As String())
        ' 获取所有唯一键
        Dim uniqueKeys = arr.Distinct().ToArray()
        所有键 = uniqueKeys
        
        ' 统计元素出现次数
        Dim countDict = arr.GroupBy(Function(x) x) _
                          .ToDictionary(Function(g) g.Key, 
                                      Function(g) g.Count())
        
        ' 分类处理
        Dim dupKeys As New List(Of String)
        Dim nonDupKeys As New List(Of String)
        
        For Each key In uniqueKeys
            If countDict(key) > 1 Then
                dupKeys.Add(key)
            Else
                nonDupKeys.Add(key)
            End If
        Next
        
        有重复的键 = dupKeys.ToArray()
        无重复的键 = nonDupKeys.ToArray()
    End Sub

    Sub Main()
        ' 测试用例
        Dim testArr = {"a", "a", "b", "b", "c"}
        Dim allKeys(), dupKeys(), nonDupKeys() As String
        
        ClassifyArray(testArr, allKeys, dupKeys, nonDupKeys)
        
        Console.WriteLine("所有键: " & String.Join(",", allKeys))
        Console.WriteLine("有重复的键: " & String.Join(",", dupKeys))
        Console.WriteLine("无重复的键: " & String.Join(",", nonDupKeys))
    End Sub
End Module
  1. 函数接收输入数组和三个引用参数,通过ByRef返回结果
  2. 使用LINQ的Distinct获取唯一键集合
  3. 通过GroupBy统计元素出现频率
  4. 根据出现次数将键分为重复和非重复两类
  5. 包含测试用例演示功能使用方式
  6. 完全符合VB.NET语法规范,可直接集成到项目中
相关推荐
武藤一雄6 小时前
C# 竟态条件
microsoft·c#·.net·.netcore
FL16238631297 小时前
基于C#winform部署RealESRGAN的onnx模型实现超分辨率图片无损放大模糊图片变清晰
开发语言·c#
武藤一雄8 小时前
WPF深度解析Behavior
windows·c#·.net·wpf·.netcore
蓝天星空8 小时前
C#中for循环和foreach循环的区别
开发语言·c#
极客智造8 小时前
Nito.AsyncEx 详解:.NET 异步编程的瑞士军刀
.net
桑榆肖物8 小时前
用 .NET 做一个跨平台的 Improv Wi-Fi 蓝牙配网项目
.net·蓝牙·iot
小邓的技术笔记9 小时前
.NET 进阶之路:异步、并发与内存管理的系统性认知
.net
Maybe_ch9 小时前
WPF的STA线程模型、APM与TAP:从线程约束到现代异步
c#·.net·wpf
我是唐青枫10 小时前
C#.NET Consul + Steeltoe 深入解析:服务注册发现、健康检查与微服务接入
c#·.net·consul