如何解决获取数组的索引,并删除该索引剩下的所有内容
| 我有一个int
的数组
int[] RowOfints = 1,2,3,4,5,6,7,8,9;
如果我输入例如值4
,我想从数组中删除1,3
并返回剩下的值。
怎么做?
解决方法
我正在解释您要查找值
4
的索引,然后从该索引位置开始的所有内容的问题。
var result = RowOfInts.SkipWhile(item => item != 4); // optionally,.ToArray()
result
将是由4 .. 9
组成的IEnumerable<int>
。如果需要一个具体的数组,也可以使用可选的ToArray()
扩展方法。如果数组中没有元素符合给定条件,则将得到一个零长度的序列。
,如果您不想使用LINQ:
int[] newRowOfInts = new int[RowOfInts.Length - index];
Array.Copy(RowOfInts,index,newRowOfInts,newRowOfInts.Length);
,在LINQ中使用跳过扩展。
int[] newArray = RowOfInts.Skip(value).ToArray();
,好的,现在我对问题有了更好的了解,我将发布实际要求的版本(再次错误地强调效率而非可读性):
private static int[] RemoveBeforeValue(int[] source,int value)
{
if (source == null)
return null;
int valueIndex = 0;
while (valueIndex < source.Length && source[valueIndex] != value)
valueIndex++;
if (valueIndex == 0)
return source;
int[] result = new int[source.Length - valueIndex];
Array.Copy(source,valueIndex,result,result.Length);
return result;
}
老答案
如果您想用硬方法(但高效!)进行操作,则可以这样做(假设您要删除的值小于提供的值):
private static int[] RemoveValuesLessThan(int[] source,int newMinimum)
{
if (source == null)
return null;
int lessThanCount = 0;
for (int index = 0; index < source.Length; index++)
if (source[index] < newMinimum)
lessThanCount++;
if (lessThanCount == 0)
return source;
int[] result = new int[source.Length - lessThanCount];
int targetIndex = 0;
for (int index = 0; index < source.Length; index++)
if (source[index] >= newMinimum)
result[targetIndex++] = source[index];
return result;
}
,对于连续的整数数组
public static void RemoveIntsBefore(int i)
{
int[] RowOfints = { 1,2,3,4,5,6,7,8,9 };
for (int k = 0; k < RowOfints.Length; k++)
{
if (RowOfints.ElementAt(k) < i)
{
RowOfints[k] = i;
}
}
RowOfints = RowOfints.Distinct().ToArray();
//this part is to write it on console
//foreach (var item in RowOfints)
//{
// Console.WriteLine(item);
//}
//Console.ReadLine();
}
有了这个,你的数组不必是顺序的
public static void RemoveIntsBefore(int i)
{
int[] RowOfints = { 1,9,1,2 };
Console.WriteLine(\"OUTPUT\");
foreach (var item in Enumerable.Range(i-1,RowOfints.Length + 1 - i).ToArray())
{
Console.WriteLine(RowOfints[item]);
}
Console.ReadLine();
}
,使用System.Linq;
....
int[] RowOfints = {1,9};
int[] Answer = RowOfints.Where(x => x != 1 && x != 2 && x != 3).ToArray()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。