获取数组的索引,并删除该索引剩下的所有内容

| 我有一个
int
的数组
int[] RowOfints = 1,2,3,4,5,6,7,8,9;
如果我输入例如值
4
,我想从数组中删除
1,2,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, 0, 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, 0, 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, 2, 3, 4, 5, 6, 7, 8, 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,2,3,4,5,6,7,8,9};
int[] Answer = RowOfints.Where(x => x != 1 && x != 2 && x != 3).ToArray()
    

要回复问题请先登录注册