C# 查找数组的最后一个索引

C# 查找数组的最后一个索引,c#,arrays,C#,Arrays,如何在C#?中检索数组的最后一个元素以计算最后一项的索引: int index = array.Length - 1; 如果数组为空,将得到-1-您应该将其视为特例 要访问最后一个索引,请执行以下操作: array[array.Length - 1] = ... 或 如果数组实际为空(长度为0),将导致异常。假设您的数组名为arr 做 如果数组为空,则以下内容将返回NULL,否则返回最后一个元素 var item = (arr.Length == 0) ? null : arr[arr.Le

如何在C#?

中检索数组的最后一个元素以计算最后一项的索引:

int index = array.Length - 1;
如果数组为空,将得到-1-您应该将其视为特例

要访问最后一个索引,请执行以下操作:

array[array.Length - 1] = ...


如果数组实际为空(长度为0),将导致异常。

假设您的数组名为arr


如果数组为空,则以下内容将返回NULL,否则返回最后一个元素

var item = (arr.Length == 0) ? null : arr[arr.Length - 1]

数组有一个
Length
属性,该属性将为您提供数组的长度。由于数组索引是从零开始的,最后一项将位于
长度-1

string[] items = GetAllItems();
string lastItem = items[items.Length - 1];
int arrayLength = array.Length;
在C#中声明数组时,您给出的数字是数组的长度:

string[] items = new string[5]; // five items, index ranging from 0 to 4.
使用。包含数组中的项数,因此读取长度-1仅在假定数组是基于零的情况下有效。

LINQ提供:

当您不想不必要地创建变量时,这非常方便

string lastName = "Abraham Lincoln".Split().Last();

这值得一提吗

var item = new Stack(arr).Pop();
:


另外,从.NET Core 3.0(和.NET Standard 2.1)(C#8)开始,您可以使用
Index
type来保留数组的索引:

var lastElementIndexInAnyArraySize=^1;
var lastElement=数组[lastElementIndexInAnyArraySize];
可以使用此索引获取任意长度数组中的最后一个数组值。例如:

var firstArray=new[]{0,1,1,2,2};
var secondArray=new[]{3,3,4,4,5,5,5,5,5,5,5,5,5,5,5};
var指数=^1;
var firstArrayLastValue=firstArray[index];//2.
var secondArrayLastValue=secondArray[index];//5.

有关详细信息,请检查数组从索引0开始,到n-1结束

static void Main(string[] args)
{
    int[] arr = { 1, 2, 3, 4, 5 };
    int length = arr.Length - 1;   // starts from 0 to n-1

    Console.WriteLine(length);     // this will give the last index.
    Console.Read();
}
在C#8.0中,您可以使用所谓的“hat”(^)操作符!当您想在同一行中执行某项操作时,这非常有用

var mystr=“你好,世界!”;
var lastword=mystr.Split(“”[^1];
Console.WriteLine(lastword);
//世界!
而不是老办法:

var mystr=“你好世界”;
var split=mystr.split(“”);
var lastword=split[split.Length-1];
Console.WriteLine(lastword);
//世界!
它不会节省太多空间,但看起来更清晰(也许我只是因为我来自python才这么认为?)。这也比调用
.Last()
.Reverse()

编辑:您可以将此功能添加到类中,如下所示:

公共类MyClass
{
公共对象此[索引indx]
{
得到
{
//在这里进行索引,这只是.IsFromEnd属性的一个示例
if(indx.IsFromEnd)
{
Console.WriteLine(“负索引!”)
}
其他的
{
Console.WriteLine(“正索引!”)
}
}
}
}

Index.IsFromEnd
将告诉您是否有人在使用'hat'(^)运算符

您是否在寻找如何检索存储在数组最后一个点中的值,或索引的实际值?我指的是索引值,即,从0开始到n标题和内容询问不同的问题。这也可以写成
var item=(arr.Length==0)??arr[arr.Length-1]
@user215361否,这是无效的C。您的示例将导致:
错误CS0019:运算符“??”不能应用于“bool”和“int”类型的操作数
当数组有零项时,此操作失败,在这种情况下,
(items.Length-1)=-1
在C#8中有一个新的用于索引的运算符:
char[]arr={C',b',a'};int a_last=arr[^1];int b_second_last=arr[^2]不是所有数组都是C#zero-based吗?@mgttlinger,大多数都是,但是您可以使用创建非zero-based数组,或者您在与其他语言编写的库通信时可能会遇到它们。太棒了!为什么这次没有投票(我在发表评论时的投票结果是3票)?这是迄今为止最优雅的非LINQ解决方案。更新:GetUpperBound(0)函数将只返回
int
。它可能不会返回用户对其他数值数组的期望值,也不会返回非数值数组的所有期望值。这就是为什么这项投票没有超过3。这应该是最重要的答案。最后一项很好,但只获得最后一项是非常具体的。C#是否有类似slice的东西,可以使用
slice(-2)
来获取最后2个或
slice(0,-2)
从一开始获取除最后2个之外的项目?这样,就不需要像Last这样的函数了,因为可以像我在其他语言中使用的那样执行
slice(-1)
。@HMR是的,请看:不。不,它没有。仍然不够慢,转换为xml并在sql server上求值如何?更多关于索引的信息-一个特殊值^0减少到数组的长度。因此firstArray[^0]给出的“索引超出了数组的界限。”异常!
string lastName = "Abraham Lincoln".Split().Last();
var item = new Stack(arr).Pop();
int[] array = { 1, 3, 5 };
var lastItem = array[^1]; // 5
static void Main(string[] args)
{
    int[] arr = { 1, 2, 3, 4, 5 };
    int length = arr.Length - 1;   // starts from 0 to n-1

    Console.WriteLine(length);     // this will give the last index.
    Console.Read();
}