C# 列表与数组:一对多和有一个关系
几天前,我面临一项测试,要求我回答以下问题:虽然这似乎很基本,但我有一些疑问和我自己的观点 出版中心出版书籍。一个作家可以写很多书,一本书有一个作者 有四个选项,其中我省略了两个不接近的选项。因此,剩下两个选项如下: 一个带有列表的选项:C# 列表与数组:一对多和有一个关系,c#,arrays,asp.net-mvc,list,one-to-many,C#,Arrays,Asp.net Mvc,List,One To Many,几天前,我面临一项测试,要求我回答以下问题:虽然这似乎很基本,但我有一些疑问和我自己的观点 出版中心出版书籍。一个作家可以写很多书,一本书有一个作者 有四个选项,其中我省略了两个不接近的选项。因此,剩下两个选项如下: 一个带有列表的选项: public class Publisher { public int PublisherId { get; set;} public string PublisherName { get; set;} public string Addre
public class Publisher
{
public int PublisherId { get; set;}
public string PublisherName { get; set;}
public string Address { get; set;}
public List<Author> Authors { get; set;}
public List<Book> Books{ get; set;}
}
public class Author
{
public int AuthorId { get; set;}
public string AuthorName { get; set;}
public string AuthorAddress { get; set;}
public List<Book> Books{ get; set;}
}
public class Book
{
public int BookId { get; set;}
public string BookName { get; set;}
public Author Author { get; set;}
}
public class Publisher
{
public int PublisherId { get; set;}
public string PublisherName { get; set;}
public string Address { get; set;}
public Author[] Authors { get; set;}
public Book[] Books{ get; set;}
}
public class Author
{
public int AuthorId { get; set;}
public string AuthorName { get; set;}
public string AuthorAddress { get; set;}
public Book[] Books{ get; set;}
}
public class Book
{
public int BookId { get; set;}
public string BookName { get; set;}
public Author Author { get; set;}
}
同时,我查看了此链接以了解差异:基于此,首先,我选择了第一个选项(我的答案是这个),并相信,
List
具有更多功能,是一个更好的选择。另一个原因是,我在项目中使用EF,并且在处理与表的关系时,特别针对一对多,然后创建类,有一个列表
的集合,如下所示:
public List<Book> Books{ get; set;}
public List book{get;set;}
其次,我在想,如果数组也可以用于相同的目的,但是我所学到的数组数据结构对于固定数据来说是完美的。我希望,我在正确的轨道上
最后,我无法从提供的链接中理解两件事:
public class Publisher
{
public int PublisherId { get; set;}
public string PublisherName { get; set;}
public string Address { get; set;}
public List<Author> Authors { get; set;}
public List<Book> Books{ get; set;}
}
public class Author
{
public int AuthorId { get; set;}
public string AuthorName { get; set;}
public string AuthorAddress { get; set;}
public List<Book> Books{ get; set;}
}
public class Book
{
public int BookId { get; set;}
public string BookName { get; set;}
public Author Author { get; set;}
}
public class Publisher
{
public int PublisherId { get; set;}
public string PublisherName { get; set;}
public string Address { get; set;}
public Author[] Authors { get; set;}
public Book[] Books{ get; set;}
}
public class Author
{
public int AuthorId { get; set;}
public string AuthorName { get; set;}
public string AuthorAddress { get; set;}
public Book[] Books{ get; set;}
}
public class Book
{
public int BookId { get; set;}
public string BookName { get; set;}
public Author Author { get; set;}
}
1) 作为计数器-列表
是一维的;其中,有int[,]或string[,]等矩形(etc)数组,但在对象模型中有其他方法对此类数据进行建模(如果需要)
我的视图-一维的意思是列表
一维数组或相关的东西
2) 有点困惑,我的意思是,在什么情况下,我们应该将以下内容与数组一起使用?虽然它解释了,但需要进一步澄清:
- 它会进行大量的位移位,因此字节[]非常重要
用于编码
- 我使用一个本地滚动字节[]缓冲区,在发送到底层流(和v.v.)之前填充该缓冲区;比缓冲流快
等等,
- 它在内部使用基于数组的对象模型(Foo[]而不是List),因为大小在构建后是固定的,需要
非常快
正如链接所说,首先,您必须了解,默认情况下,数组具有特定的大小,指示如何分配内存。如果超出该分配,您将不得不担心将内存再次分配给整个阵列
列表是动态的,这基本上意味着一个元素将只保留一个指向行中下一个元素的指针,因此很容易在任何位置(前面、后面、中间)添加新项目。主变量只保留指向第一个元素的指针,因此列表就是这样放在一起的
老实说,在您的示例中,我会使用列表版本,因为它们可以根据需要进行扩展和收缩,而且内存效率更高
另一方面,我宁愿使用IList甚至IEnumerable类型,这样您就可以在创建者生成新对象时打开具体的实现
当需要添加、删除等操作时,可以使用IList;当只需要枚举元素(即搜索、筛选)时,可以使用IEnumerable
回答您的问题:
1) 数组像int[,]一样是多维的,这可以通过IList>轻松实现;这都是抽象的,我建议您研究链表类型(),也许这会回答一些问题
2) 这是该应用程序特有的,通常一些字节数组操作会在默认情况下返回字节数组,同样,因为大小是可预测的,所以不确定您真正在寻找什么
希望这能有所帮助。好吧,个人观点:除了数组/集合-问题之外,如果逐字逐句地分解需求,我认为这两种解决方案都是不正确的:提到了两个参与者:“作者”和“作者”。两者可能不一样。在出版环境中,我认为了解“鬼作家”并不太牵强。但如果这些是唯一合理的选择,那么我想我可能走得太远了。我想,作者和作者是同一个词。这似乎是混淆或混淆。考虑一本书可以有多个作者(或作家),是正确的基础关系逻辑构建?我认为一对多关系通常有列表
作为其他表的参考。问题是什么?你给了我们一个关于问题的模糊概念,并详细说明了你对数组和列表的调查,但实际上你并没有问任何问题。你想知道什么?为了它的价值,这个测试似乎没有方向性和模糊性,但这不是测试回顾交换。我同意这一点,谢谢你的解释。我希望你能在最后回答接下来的两个问题。我已经编辑了答案,希望能为你澄清一些事情实际上,在内部使用数组,而不是链表。因此如果list
在内部使用数组,那么List
是一个一维数组还是多维数组?我是说数组是如何构造的@Pieter Witvoet?仅作澄清。@user8512043:数组可以是多维的,但这只在特定情况下有用-它根本不会影响您的用例。