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

时间:2011-04-15 20:55:25

标签: c# arrays int

我有一个int s

数组
int[] RowOfints = 1,2,3,4,5,6,7,8,9;

如果我输入例如值4,我想从数组中删除1,2,3并返回剩下的内容。 怎么做?

6 个答案:

答案 0 :(得分:3)

如果您不想使用LINQ:

int[] newRowOfInts = new int[RowOfInts.Length - index];
Array.Copy(RowOfInts, index, newRowOfInts, 0, newRowOfInts.Length);

答案 1 :(得分:2)

在LINQ中使用Skip扩展名。

int[] newArray = RowOfInts.Skip(value).ToArray();

答案 2 :(得分:1)

我正在解释您想要找到值4的索引的问题,然后从该索引位置开始一切。

var result = RowOfInts.SkipWhile(item => item != 4); // optionally, .ToArray()

result将是由IEnumerable<int>组成的4 .. 9。如果你想要一个具体的数组,你也可以使用可选的ToArray()扩展方法。如果数组中没有元素与给定条件匹配,则将获得零长度序列。

答案 3 :(得分:1)

好了,既然我更好地理解了这个问题,我会发布我的实际要求版本(再次强调对可读性的有效性):

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;
}

OLD ANSWER

如果你想用硬(但效率高!)的方式做,那么你可以这样做(假设你想要删除小于提供值的值):

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;
}

答案 4 :(得分:0)

output
对于顺序的整数数组

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();

    }

答案 5 :(得分:-1)

使用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()