有谁知道Set在C#中是否有与Java 集合相当的好处?我知道你可以使用a Dictionary或者HashTable通过填充而忽略值来模仿一个集合,但这不是一个非常优雅的方式.
我正在探索这种HashSet<T>类型,但我不明白它在收藏中的位置.
可以用它来代替List<T>吗?我认为a的表现HashSet<T>会更好,但我看不到个人对其元素的访问.
它只用于枚举吗?
我有这个文件类型过滤器:
public const string Png = "PNG Portable Network Graphics (*.png)|" + "*.png";
public const string Jpg = "JPEG File Interchange Format (*.jpg *.jpeg *jfif)|" + "*.jpg;*.jpeg;*.jfif";
public const string Bmp = "BMP Windows Bitmap (*.bmp)|" + "*.bmp";
public const string Tif = "TIF Tagged Imaged File Format (*.tif *.tiff)|" + "*.tif;*.tiff";
public const string Gif = "GIF Graphics Interchange Format (*.gif)|" + "*.gif";
public const string AllImages = "Image file|" + "*.png; *.jpg; *.jpeg; *.jfif; *.bmp;*.tif; *.tiff; *.gif";
public …Run Code Online (Sandbox Code Playgroud) 在C#.NET中,我喜欢使用HashSets,因为它们的查找时间复杂度为O(1).如果我要查询大量数据,我通常更喜欢将HashSet用于List,因为它具有这种时间复杂性.
令我困惑的是HashSet的构造函数,它将IEqualityComparer作为参数:
http://msdn.microsoft.com/en-us/library/bb359100.aspx
在上面的链接中,备注注意到"构造函数是一个O(1)操作",但如果是这种情况,我很好奇,如果查找仍然是O(1).
特别是,在我看来,如果我要编写一个Comparer来传递给HashSet的构造函数,每当我执行查找时,必须在每个键上执行Comparer代码以检查是否存在一场比赛.这不是O(1),而是O(n).
当元素添加到集合中时,实现是否在内部构建查找表?
一般来说,我如何确定有关.NET数据结构复杂性的信息?
我的EF模型看起来像这样:
public class ContentStatus
{
public ContentStatus()
{
this.Contents = new List<Content>();
}
public int ContentStatusId { get; set; }
public string Name { get; set; }
public virtual ICollection<Content> Contents { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是我也看到了如下所示的implementatins:
public class ContentStatus
{
public ContentStatus()
{
this.Contents = new HashSet<Content>();
}
public int ContentStatusId { get; set; }
public string Name { get; set; }
public virtual ICollection<Content> Contents { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是此Object的DDL:
CREATE TABLE [dbo].[ContentStatus] (
[ContentStatusId] INT NOT …Run Code Online (Sandbox Code Playgroud) 这在某种程度上与此(获取 C# 列表中的所有唯一项)问题有关。
上面的问题是在谈论一个简单的值数组。我有一个从第三方 Web 服务返回的对象:
public class X
{
public Enum y {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我有这些对象的列表,List<x> data;总共大约 100 条记录但可变。现在我想要属性列表中的所有可能值,y我想绑定它做一个CheckBoxList.DataSource(以防万一)。
如何最有效的方法来做到这一点?
我可以想到两种算法:
var data = HashSet<Enum> hashSet = new HashSet<Enum>(xs.Select(s => s.y));
chkBoxList.DataSource = data;
Run Code Online (Sandbox Code Playgroud)
或者
var data = xs.Select(s => s.y).Distinct();
chkBoxList.DataSource = data;
Run Code Online (Sandbox Code Playgroud)
我的直觉是 HashSet 但我不是 100% 确定。
如果有人有任何想法,可以接受更好的想法吗?
我想仅在列表中尚未添加classStudents到列表中._ClassStudentsclassStudents
public class ClassStudents{
public Id {get; set;}
public Name {get; set;}
public List<Student> Student {get; set;}
}
public static List<ClassStudents> _ClassStudentsList = new List<ClassStudents>();
public static void addClassStudents(ClassStudents classStudents)
{
//if( classStudents isn't in ClassStudentsList ) <------
_ClassStudentsList.Add(classStudents);
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
c# ×7
hashset ×3
.net ×2
asp.net ×1
c#-4.0 ×1
collections ×1
filefilter ×1
linq ×1
performance ×1
runtime ×1
set ×1
sql-server ×1