如何指定数组的边界
How to specify the bounds of an array
我尝试指定数组的边界:
public string[] scaleChanged()
{
int j =0;
for(int i=0;i<42;i++)
{
if(MinScale == ItemScale[i]) //MinScale is the min value I want to use to start array
{
ItemsScale[j] = MinScale; //ItemScal is an array of 42 string
for(int h =0; h<42-i; h++)
{
ItemScale[j+1] = ItemScale[i];
j++;
if(ItemScale[j] == MaxScale) //MaxScale is my max value I want to use for stop my array
{
return ItemScale[ ???MinScale to MaxScale];
}
}
}
}
}
所以我从一个允许我指定数组边界的服务器中恢复了 2 个值。
所以我尝试用这两个值定义一个新数组 bounds.I 准确地说,这个“两个值”总是在我的 ItemScale 数组中的任何地方声明(这就是我使用比较的原因)。
是否真的取决于您在这里尝试做什么。数组的边界在创建时是固定的,在 vector 的情况下(string[]
是一个向量),它总是 zero-based。如果你想要一个 实际数组 ,那么你需要将 sub-range 复制到第二个数组中 - 只是 new
正确大小的数组,并且Array.Copy
您想要的元素范围 - 即 Array.Copy(source, startIndex, destination, 0, count);
。但是,有 种方式来表示范围而无需 复制:
- 如果接收方只需要迭代数据(而不是通过索引访问它),一个
IEnumerable<T>
- 即 return source.Skip(firstIndex).Take(count);
Span<T>
或 ReadOnlySpan<T>
,即 return new Span<string>(source, firstIndex, count)
- “跨度”的工作方式很像数组,不需要任何复制,并且是 allocation-free;适当应用偏移等;请注意,一旦你有了一个跨度,.Slice(...)
在该跨度内创建越来越小的 sub-sections,同样没有任何复制或分配
- 这里的一件好事是,您可以使用 span 方法作为处理创建新 array 的更简单方法,如果您愿意的话 - 一旦您有了
[ReadOnly]Span<T>
,您可以使用 .ToArray()
创建一个包含这些内容的新数组
Memory<T>
或 ReadOnlyMemory<T>
实际上是“我可以在你想要的时候给你一个跨度”——因为你不能将“跨度”存储为一个字段(它只在栈),但是你可以存储“内存”
ArraySegment<T>
是用偏移量和计数表示数组的较旧隐喻;它依赖于调用者正确地做所有事情
我尝试指定数组的边界:
public string[] scaleChanged()
{
int j =0;
for(int i=0;i<42;i++)
{
if(MinScale == ItemScale[i]) //MinScale is the min value I want to use to start array
{
ItemsScale[j] = MinScale; //ItemScal is an array of 42 string
for(int h =0; h<42-i; h++)
{
ItemScale[j+1] = ItemScale[i];
j++;
if(ItemScale[j] == MaxScale) //MaxScale is my max value I want to use for stop my array
{
return ItemScale[ ???MinScale to MaxScale];
}
}
}
}
}
所以我从一个允许我指定数组边界的服务器中恢复了 2 个值。
所以我尝试用这两个值定义一个新数组 bounds.I 准确地说,这个“两个值”总是在我的 ItemScale 数组中的任何地方声明(这就是我使用比较的原因)。
是否真的取决于您在这里尝试做什么。数组的边界在创建时是固定的,在 vector 的情况下(string[]
是一个向量),它总是 zero-based。如果你想要一个 实际数组 ,那么你需要将 sub-range 复制到第二个数组中 - 只是 new
正确大小的数组,并且Array.Copy
您想要的元素范围 - 即 Array.Copy(source, startIndex, destination, 0, count);
。但是,有 种方式来表示范围而无需 复制:
- 如果接收方只需要迭代数据(而不是通过索引访问它),一个
IEnumerable<T>
- 即return source.Skip(firstIndex).Take(count);
Span<T>
或ReadOnlySpan<T>
,即return new Span<string>(source, firstIndex, count)
- “跨度”的工作方式很像数组,不需要任何复制,并且是 allocation-free;适当应用偏移等;请注意,一旦你有了一个跨度,.Slice(...)
在该跨度内创建越来越小的 sub-sections,同样没有任何复制或分配- 这里的一件好事是,您可以使用 span 方法作为处理创建新 array 的更简单方法,如果您愿意的话 - 一旦您有了
[ReadOnly]Span<T>
,您可以使用.ToArray()
创建一个包含这些内容的新数组
- 这里的一件好事是,您可以使用 span 方法作为处理创建新 array 的更简单方法,如果您愿意的话 - 一旦您有了
Memory<T>
或ReadOnlyMemory<T>
实际上是“我可以在你想要的时候给你一个跨度”——因为你不能将“跨度”存储为一个字段(它只在栈),但是你可以存储“内存”ArraySegment<T>
是用偏移量和计数表示数组的较旧隐喻;它依赖于调用者正确地做所有事情