use*_*043 5 c# arrays asp.net-mvc list one-to-many
几天前,我遇到了一个测试,我被要求回答以下问题:虽然看起来很基本,但我有一些疑问和我自己的看法
出版中心出版书籍.作家可以写很多书,书也有作者
有四个选项,其中,我省略了两个不接近的选项.所以留下两个选项如下:
列表的一个选项:
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;}
}
Run Code Online (Sandbox Code Playgroud)
阵列的另一个选项:
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;}
}
Run Code Online (Sandbox Code Playgroud)
同时,我查看了这个链接以了解其中的区别:List Vs Array
在此之后,首先,我选择了第一个选项(我的回答是这个)并且相信,它List具有更多功能并且将是更好的选择.另一个原因是,我在项目中使用EF,并且在与一对多的表的关系工作时,然后创建的类具有如下集合List:
public List<Book> Books{ get; set;}
Run Code Online (Sandbox Code Playgroud)
其次,我在想,如果数组可以用于相同的,但我学到的数组数据结构非常适合固定数据.我希望,我走在正确的轨道上.
最后,我无法从提供的链接中理解两件事:
1)作为反制 - List<T>是一维的; where - 因为你有像int [,]或string [,,]这样的矩形(等)数组 - 但是在对象模型中还有其他方法可以建模这些数据(如果需要)
我的观点 - 一维手段是List一维数组或相关的东西.
2)有点困惑我的意思是在什么情况下我们应该使用以下内容Array?虽然它解释了但需要进一步澄清:
它会进行大量的位移,因此byte []对编码非常重要;
我使用一个本地滚动byte []缓冲区,在发送到底层流(和vv)之前我填充; 比BufferedStream等更快;
正如链接所说,首先您必须了解默认情况下数组具有特定的大小,该大小指示内存的分配方式。如果超过该分配,您将不得不担心再次为整个数组分配内存。
列表是动态的,这基本上意味着一个元素只会保留指向行中下一个元素的指针,因此很容易在任何地方(前面、后面、中间)添加新项目。main 变量仅保留指向第一个元素的指针,这就是列表的组合方式。
老实说,在您的示例中,我会使用列表版本,因为它们可以根据需要扩展和收缩,并且内存效率更高。
顺便说一句,我宁愿使用 IList 甚至 IEnumerable 类型,这样您就可以在创建者生成新对象时保留要使用的具体实现。
当您需要添加、删除等操作时,您可以使用 IList;当您只需要枚举元素(即搜索、过滤)时,您可以使用 IEnumerable。
回答您的问题: 1)数组是多维的,如 int[,] ,可以使用 IList> 轻松实现;这都是抽象的,我建议您研究链表类型(https://www.tutorialspoint.com/data_structs_algorithms/linked_list_algorithms.htm),也许这会回答一些问题2)这对于该应用程序来说是非常具体的,通常一些字节数组操作将默认返回字节数组,因为大小是可预测的,所以不确定您真正在寻找什么。
希望这可以帮助。