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