C# 求数组的最低自由位置

C# 求数组的最低自由位置,c#,arrays,C#,Arrays,我对数组有问题,我需要找到数组的最低自由位置以将信息插入其中。我该怎么做呢 例如,我有一个数组string[]array=string[10],其中数组的一些位置已经被填充,我需要在数组中选择一个点,然后返回到位置0,该点是空闲的,然后返回该值 这可能很简单,但我完全被难住了,谢谢你的帮助。你需要遍历数组的所有索引,直到找到一个null条目 for(int i = myArr.Length - 1; i >= 0; i--) { if(myArr[i] == null) {

我对数组有问题,我需要找到数组的最低自由位置以将信息插入其中。我该怎么做呢

例如,我有一个数组
string[]array=string[10]
,其中数组的一些位置已经被填充,我需要在数组中选择一个点,然后返回到位置0,该点是空闲的,然后返回该值


这可能很简单,但我完全被难住了,谢谢你的帮助。

你需要遍历数组的所有索引,直到找到一个
null
条目

for(int i = myArr.Length  - 1; i >= 0; i--)
{
   if(myArr[i] == null)
   {
       myArr[i] = "no longer free!";
       break;
   }
}

如果您真的需要这样做,您可能应该使用
列表而不是数组。

在C#中使用数组时,您真的不应该编写这样的代码。最好将字符串存储在
列表中(或许多其他方便的集合中),该列表基本上是为随机访问元素而设计的。当您需要实际的字符串数组时,请在
列表
集合上调用
.ToArray()

请考虑改用
列表
,这样可以轻松添加元素。拥有一个带有空值的数组将在稍后返回给您,您将再次检查空值。。。此外,附加thsat的方式需要时间,确实阵列很小(yoiu说有10个元素),但无论如何,每次都要花费cpu周期进行线性搜索。我认为可以尝试改进设计。

为此使用通用列表:

var myList = new List<string>();


//need to add a new item:
myList.Add("New item"); //no searching required
var myList=new List();
//需要添加新项目:
myList.添加(“新项目”)//不需要搜索

在大多数情况下,您可以像使用数组一样使用列表,包括按下标访问成员。

创建
string[]
的新实例时,其条目为
null

现在,您只需要遍历数组,直到找到第一个
null
条目

string[] arrayOfStrings = new string[10];
int index = 0;
while(index < arrayOfStrings.Length && arrayOfStrings[index] != null) index++;
if(index < arrayOfStrings.Length) {
 //arrayOfStrings[index] is lowest free position
} else {
 //every position occupied
}

忽略您这样做的原因-所有其他人都告诉过您关于
列表的内容
-在下面的代码中,
最低值
等于2

var blah = new[] {"one", "two", null, "three"};
var lowest = Array.IndexOf(blah, null);

数组中的一个点“空闲”是什么意思?听起来,无论您试图解决什么问题,您的数据结构都是错误的。它必须是高效的吗?或者O(N)复杂度足够吗?@Tudor:如果这段代码需要高效,OP就不会使用数组来处理这类事情(因为它在性能和开发时间方面都是低效的)。数组有固定的大小,有可以动态增长的集合,你的问题不清楚。初始化为空字符串的字符串数组中的所有元素有时我们无法访问
列表
。例如,使用NETMF,我们无法访问泛型,可能需要类型化集合。在这种情况下,使用
string[]
是很有用的。@ShaunLuttin:这对于NETMF是正确的,但是问题没有用它来标记,所以我假设这不是一个相关的问题。如果您确实有
列表
,您不应该以这种方式使用数组滚动您自己的集合。让我这样说。我发现你的答案毫无帮助,因为我使用的是NETMF,而且我想找到任何数组中最低的空闲位置。Oded所做的很有帮助,因为他回答了这个问题,然后为那些能够访问列表的人提出了一种替代方法。有时我们无法访问列表。例如,使用NETMF,我们无法访问泛型,可能需要类型化集合。在这种情况下,使用字符串[]很有用。有时我们无法访问
列表。例如,使用NETMF,我们无法访问泛型,可能需要类型化集合。在这种情况下,使用字符串[]是有用的。@ShaunLuttin不认为它应该被否决,因为OP不谈论abot NETMF(在提出问题时可能不存在)等等,如果你使用的是降级系统,没有理由每个人都应该降级。如果是这样,每个人都会用汇编语言编程。这是NETMF的一个公平观点。OP没有询问此事。OP确实询问了阵列;我来这里是为了回答如何在数组中找到第一个空位置。你的回答没有回答这个问题。在我看来,如果有人问起汇编程序,建议使用C#来代替的答案是不合适的。数组也是如此。为了反驳你的论点,如果你使用的是升级的系统,没有理由每个人都应该升级。
var blah = new[] {"one", "two", null, "three"};
var lowest = Array.IndexOf(blah, null);