【发布时间】:2016-04-15 19:05:47
【问题描述】:
即使经过数小时的尝试,我似乎也无法解决的任务。
基本上,我有一个接受用户输入的电话簿:姓名和号码(均为字符串类型),它变成了一个联系人。 我应该将联系人存储在 Array 中,并且用户应该能够通过 Create 和 Delete 方法从数组中添加和删除数据(联系人)。
我做了一个自己的Repository类来处理数据(Contact也有一个自己的小类),但是我使用List来存储数据,所以我可以简单使用添加和删除,所以我的代码如下所示:
public class Repository
{
List<Contact> storagelist;
public Repository() {
storagelist = new List<Contact>();
}
public void Create(Contact item) //Adds the item to the list
{
storagelist.Add(item);
}
public bool Delete(Contact item) //Removes the item
{
if (!storagelist.Contains(item))
return false;
storagelist.Remove(item);
return true;
}
}
我正在寻找的是如何做到这一点,具有添加和删除联系人的这两个功能,但将数据存储在 Array 中。
由于数组(据我所知)必须具有固定的预定义大小,我不知道如何以与 List 完全相同的方式使用它。数组大小应始终与存储的联系人数量相同,但是当数组大小固定时如何做到这一点?
那么,如何创建一个始终与存储的联系人数量相同大小的数组,以及如何在该数组中添加和删除?
非常感谢您的帮助!
编辑:感谢所有回复!每个答案在此过程中都有帮助(尤其是 Omar 和 person66!)。 我通过在删除元素之后“移动”整个数组来解决删除问题,降低 1 个索引,最后将数组调整为更小。像这样:
int deleteIndex = Array.IndexOf(storagelist, item);
for (int index = deleteIndex + 1; index < storagelist.Length; index++)
{
storagelist[index - 1] = storagelist[index];
}
Array.Resize(ref storagelist, storagelist.Length - 1);
【问题讨论】:
-
这是作业吗?为什么应该使用数组?如果您需要将列表传递到其他地方作为一个数组,您可以调用列表的
ToArray()方法 -
“数组大小应始终与存储的联系人数量相同”,这是要求吗?不可能有一个改变大小的数组。您可以创建新数组:添加联系人时,您分配一个全新的数组,该数组比您分配的前一个元素大 1 个元素,或者删除时小 1 个元素的新数组,等等。或者您从一个非常大的单个数组,然后做一堆工作来确定在添加和删除联系人时要将联系人粘贴到哪里。你必须有一种情况,而不是两种情况。
-
id est。当我看到用户应该能够做什么时,我超前并简单地使用了列表,但我很快得到了我必须使用数组进行存储的反馈。是的,那句话是一个要求:/