List<string[]> 如何去重

深度拷贝 List<string[]> 到一个新的List<string[]> 中(tempList),

遍历tempList,移除原list中重复的string[],代码如下:

static void Main(string[] args)
        {
            List<string[]> list = new List<string[]>();

            list.Add(new string[]{"1","2","3"});
            list.Add(new string[] { "1","2" ,"3"});
            list.Add(new string[] { "1" });
            list.Add(new string[] { "1" });
            list.Add(new string[] { "1" });

            var tempList = new List<string[]>(list);
            if (list.Count >= 2)  //确保下标i不越界
            {
                for (int i = 1; i < tempList.Count; i++)
                {
                    if (string.Join(",", tempList[i]) == string.Join(",", tempList[i - 1]))
                    {
                        list.Remove(tempList[i]);
                    }
                }
            }

            foreach (var item in list)
            {
                string s = string.Join(",", item);
                Console.WriteLine(s);
            }
            Console.ReadKey();
        }

运行截图如下:

那么问题又来了,挖掘机技术……呸! 如果是List<List<string[]>>的集合又该如何去重呢?

原理是一样的把List<string[]>变成字符串,装到List<string>中,根据List<sting>重复的元素的下标索引,删除原集合中重复的元素,

代码如下:

 static void Main(string[] args)
        {
            List<string[]> list = new List<string[]>();

            list.Add(new string[]{"1","2","3"});
            list.Add(new string[] { "1","2" ,"3"});
            list.Add(new string[] { "1" });
            list.Add(new string[] { "1" });
            list.Add(new string[] { "1" });

            List<string[]> list2 = new List<string[]>();
            list2.Add(new string[] { "1", "2", "3" });
            list2.Add(new string[] { "1", "2", "3" });
            list2.Add(new string[] { "1" });
            list2.Add(new string[] { "1" });
            list2.Add(new string[] { "1" });

            List<string[]> list3 = new List<string[]>();

            list3.Add(new string[] { "1", "2", "3" ,"4","5"});
            list3.Add(new string[] { "1", "2", "3" });
            list3.Add(new string[] { "1" });
            list3.Add(new string[] { "1" });
            list3.Add(new string[] { "1" });

            List<List<string[]>> superList = new List<List<string[]>>();
            //集合list和集合list2是相同的
            superList.Add(list);
            superList.Add(list2);

            superList.Add(list3);

            List<string> strList = new List<string>();
            foreach (var d in superList)
            {
                StringBuilder sb = new StringBuilder();
                foreach (var dd in d)
                {
                    string s = string.Join(",", dd);
                    sb.Append(s);
                }
                string str = sb.ToString();
                strList.Add(str); //把superList中每个子元素拼接成一条字符串放到strList中
            }

            if (strList.Count >= 2)
            {
                for (int i = 1; i < strList.Count; i++)
                {
                    if (strList[i] == strList[i - 1])
                    {
                        superList.RemoveAt(i);//根据strList中重复的字符串的下标索引,删除superList中的元素
                    }
                }
            }

            Console.WriteLine(superList.Count());
            Console.ReadKey();
        }

运行截图如下:

时间: 2024-10-02 21:35:05

List<string[]> 如何去重的相关文章

【项目总结】自然语言处理在现实生活中运用

[项目总结]自然语言处理在现实生活中运用 作者 白宁超 2015年11月9日23:27:51 摘要:自然语言处理或者是文本挖掘以及数据挖掘,近来一直是研究的热点.很多人相想数据挖掘,或者自然语言处理,就有一种莫名的距离感.其实,走进去你会发现它的美,它在现实生活中解决难题的应用之美,跟它相结合的数学之美,还有它与统计学的自然融合.语言只是一种实现工具,真正难度的是模型的理解和对模型的构建.本文结合自然语言处理的基本方法,完成对2002--2010年17套GET真题的核心单词抽取.麻雀虽小,也算五

java基础第十七天_QQ案例

QQ案例 ----------------------------------------------------- 项目源码: package com.it18zhang.client; import java.net.Socket; /** * 通信类,单例类 */ public class Comm { private String ip = "192.168.12.2"; private int port = 1234 ; private static Comm instanc

Java通用数据访问层Fastser-DAL推荐

本着不重复造轮子的原则,基于mybatis.spring jdbc.hibernate等ORM的通用数据访问层,支持基于datasource的读写分离.主备自动切换和故障转移,支持简单的负载均衡. 源码地址:http://git.oschina.net/fastser/fastser-dal-all 特性: 基于mybatis.spring jdbc.hibernate等各大orm框架实现通用dal层功能,并可以与已有项目完全兼容.同时也可以在已经实现的orm框架之间任意切换,不需要对代码作任何

java 11 增加了一系列的字符串处理方法,Optional 加强 ,改进的文件API

增加了一系列的字符串处理方法 如以下所示. // 判断字符串是否为空白 " ".isBlank(); // true // 去除首尾空白 " Javastack ".strip(); // "Javastack" // 去除尾部空格 " Javastack ".stripTrailing(); // " Javastack" // 去除首部空格 " Javastack ".stripLe

String 去重,区分大小写

题目要求:去除,和.,相同的单词去除后面的.不区分大小写 示例:输入:There is a will,there is a way. 输出There is a will there way 答案代码: String s = "There is a will there is a way"; Pattern p = Pattern.compile("[,.]"); String ss = p.matcher(s).replaceAll(""); L

找出两个String中相同的字符并去重

import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; public class Test {  public static void main(String[] args) {   String s1 = "123456abcde";   String s2 = "111222bbbcc

List&lt;String&gt;去重

public static List<String> removeDuplicate(List<String> list) { HashSet<String> h = new HashSet<String>(list); list.clear(); list.addAll(h); return list; } 原文地址:https://www.cnblogs.com/yazoon/p/11429857.html

C++中字符数组和字符串string

字符数组 C++中字符数组用char str[]可以用来表示一个字符串. (1)   数组的大小和字符串的长度. 数组的大小一定要大于字符串的长度,因为系统会自动补上一个'\0'作为字符串的结束标志.当然对于未初始化的也补'\0'. #include <iostream> #include <string> using namespace std; int main() { char str[11] = "I am happy"; // 系统会自动补上'\0'空

java不用任何已有方法完全自写的去重法

package aa; class InsertSort{ private long[] a; private int nElems; //构造方法 public InsertSort(int max){ a = new long[max]; nElems = 0; } //插入方法 public void insert(long value){ a[nElems] = value; nElems ++; } //显示方法 public void display(){ for(int j = 0