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语法规范,可直接集成到项目中
相关推荐
万19992 小时前
asp.net core webapi------3.AutoMapper的使用
c#·.netcore
唐青枫2 小时前
C#.NET 路由机制深入解析:从传统路由到 Endpoint Routing
c#·.net
hixiong12312 小时前
C# OpenCVSharp使用 读光-票证检测矫正模型
人工智能·opencv·c#
霜绛12 小时前
C#知识补充(二)——命名空间、泛型、委托和事件
开发语言·学习·unity·c#
好望角雾眠13 小时前
第四阶段C#通讯开发-6:Socket之UDP
开发语言·笔记·学习·udp·c#
霜绛14 小时前
C#知识补充(一)——ref和out、成员属性、万物之父和装箱拆箱、抽象类和抽象方法、接口
开发语言·笔记·学习·c#
爱编程的鱼14 小时前
C# var 关键字详解:从入门到精通
开发语言·c#·solr
玩泥巴的15 小时前
解放双手!使用Roslyn生成代码让你的 HTTP 客户端开发变得如此简单
c#·.net·代码生成·roslyn
星释17 小时前
Rust 练习册 :Pig Latin与语言游戏
游戏·rust·c#
蒲公英源码18 小时前
超市进销存源码
sqlserver·c#·.net