C#中List怎么转换成hashset

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中List怎么转换成hashset相关的知识,希望对你有一定的参考价值。

别说foreach添加进去,地球人都知道,问题是这样也太慢了吧,有没有直接转换的办法。

类似的问题被提了很多遍了,你可以从根子上这样看:

HashSet<T>的构造方法之一是HashSet<T>(IEnumerable<T> collection),这说明哈希集可以在构造时通过传入一个有着*元素类型为T的可枚举的集合*完成初始化。


如1楼所示,List<string> _dd其实本身就继承有IEnumerable<string>接口,所以不要使用Linq的cast系列方法,你只需要一行:

HashSet<string> _ss=new HashSet<string>(_dd);

大多数的集合类型都可以这样通过构造来初始化。

由于这种转换是结构上的转换而非值的转换,所以绝大多数情况下都需要new一下目标对象,指望List<T>自己提供转换结构的方法是不靠谱的。


此外要说一句,你说的“地球人都知道”没有错,但是它还真的不慢哟。要知道,即使是使用上述构造方法,本质上来说CLR也是通过一个一个枚举_dd的元素并添加到_ss去的,两种方法在代码量上有差距,但是执行效率上几乎相等的。(因为编译时代码会自动优化的)


真的要使用大数据(如含有10万string的List<string>),请勿使用上述两种方法(因为都慢),你需要学习Parallel系列的并行处理,可以理解为一种能够利用到所有CPU核心的多线程处理。

参考技术A

我来满足你的要求!!

using System.linq;
List<string> _dd = new List<string>();
_dd.Add("1");
_dd.Add("2");
HashSet<string> _ss = new HashSet<string>(_dd.Cast<string>());

结果你自己调试看就知道了

C#将DataTable转换成list的方法

本文实例讲述了C#将DataTable转换成list及数据分页的方法。分享给大家供大家参考。具体如下:

/// <summary>  

 /// 酒店评论列表-分页  

/// </summary>  

/// <param name="userId"></param>  

/// <param name="pageIndex">当前页</param>  

/// <param name="pageCount">总页数</param>  

/// <returns></returns>  

 public static List<CommentInfo> GetHotelCommentList(int userId, int pageIndex, out int pageCount)  

 {  

     var list = new List<CommentInfo>();  

     pageCount = 0;  

     try  

     {  

         //查询酒店ID,名字,图片,用户ID,用户评论  

         string sql = string.Format( @"select hotels.hid,hotels.hotelName,hotels.images,hotelorder.UserID,user_HotelComment.comment from hotels with(nolock) join hotelorder with(nolock) join user_HotelComment   

telorder.UserID=user_HotelComment.userID on hotels.hid=hotelorder.HotelID where hotelorder.UserID={0}", userId);  

         DataTable dt = SQLHelper.Get_DataTable(sql, SQLHelper.GetCon(), null);  

         if (dt != null && dt.Rows.Count > 0)  

         {  

             list = (from p in dt.AsEnumerable()  //这个list是查出全部的用户评论  

                     select new CommentInfo  

                     {  

                         Id = p.Field<int>("hid"), //p.Filed<int>("Id") 其实就是获取DataRow中ID列。即:row["ID"]  

                         HotelImages = p.Field<string>("images"),  

                         HotelName = p.Field<string>("hotelName"),  

                         Comment = p.Field<string>("comment")  

                     }).ToList(); //将这个集合转换成list  

             int pageSize = 10; //每页显示十条数据  

  

             //获取总页数  

             pageCount = list.Count % pageSize == 0 ? ((list.Count - pageSize >= 0 ? (list.Count / pageSize) : (list.Count == 0 ? 0 : 1))) : list.Count / pageSize + 1;  

  

             //这个list 就是取到10条数据  

             //Skip跳过序列中指定数量的元素,然后返回剩余的元素。  

             //Take序列的开头返回指定数量的连续元素。  

             list = list.Skip(pageSize * (pageIndex - 1)).Take(pageSize).ToList(); //假设当前页为第三页。这么这里就是跳过 10*(3-1) 即跳过20条数据,Take(pageSize)的意思是:取10条数据,既然前面已经跳过前20条数据了,那么这里就是从21条开始,取10条咯  

         }  

     }  

     catch (Exception ex)  

     {  

         // write log here  

     }  

     return list;  

}

将一个DataTable转换成一个List
首先定义一个接收DataTable字段列的类 。类的字段与DataTable的列字段一致

using System;  

using System.Collections.Generic;  

using System.Linq;  

using System.Web;  

  

namespace WebApplication1  

{  

    /// <summary>  

    /// 用户信息  

    /// </summary>  

    public class User  

    {  

        public int Id { get; set; }  

  

        public string UserName { get; set; }  

  

        public int Age { get; set; }  

  

        public int Gender { get; set; }  

    }  

}
using System;  

using System.Collections.Generic;  

using System.Linq;  

using System.Web;  

using JSON.Controllers;  

using System.Data;  

  

namespace WebApplication1  

{  

    public class Class1  

    {  

        /// <summary>  

        /// 将DataTable转换成一个list  

        /// </summary>  

        /// <returns>返回一个List<User>对象</returns>  

        public List<User> TableToList()  

        {  

            string sql = "select  * from T_User"; //T_User表里总共有 id,UserName,Age,Gender四列  

            DataTable dt= SqlHelper.ExecuteDataTable(sql,null);  

            var list = new List<User>(); //创建一个List<User>的实例  

            if (dt != null && dt.Rows.Count > 0)  

            {  

                //AsEnumerable():返回一个IEnumerable<T> 对象,其泛型参数 T 为 System.Data.DataRow。  

                list = (from p in dt.AsEnumerable()  

                        select new User  //new一个User对象  

                        {  

                            Id = p.Field<int>("id"),//p.Filed<int>("id") 其实就是获取DataRow中ID列。即:row["ID"] 然后将它赋值给User类的Id字段。  

                            UserName = p.Field<string>("UserName"),  

                            Age = p.Field<int>("Age"),  

                            Gender = p.Field<int>("Gender")  

                        }).ToList(); //将这个User类对象转换成list  

            }  

            int dataCount = list.Count; // 总的数据条数。  

            int pageSize=10;//每页显示多少条数据。              

            int pageCount; //总页数。  

            int currentPage=3;//当前页。--这里假设当前页为第3页。  

            pageCount = dataCount % pageSize == 0 ? (dataCount < pageSize ? (dataCount==0?0:1): (dataCount / pageSize)) : (dataCount / pageSize + 1); 
     //这个list 就是取到10条数据    

            //Skip跳过序列中指定数量的元素,然后返回剩余的元素。    

            //Take序列的开头返回指定数量的连续元素。    

            list = list.Skip(pageSize * (currentPage - 1)).Take(pageSize).ToList(); //假设当前页为第3页。这么这里就是跳过 10*(3-1) 即跳过20条数据,Take(pageSize)的意思是:取10条数据,既然前面已经跳过前20条数据了,那么这里就是从21条开始,取10条咯    

            return list;   

        }          

    }  

}

 

以上是关于C#中List怎么转换成hashset的主要内容,如果未能解决你的问题,请参考以下文章

C#中Collection集合怎么转换List集合?请高手指教

C# List<long> 如何转换成 List<string> ?(求高手支招)

c# 将 json 数据转换成 List<T> 怎么转换,json 数据格式如下图:

list转换成MAP 求各位大神啊!!!

C# 怎么将json 转换成 datatable

C# DataTable 转换成数组