查找数组中元素的最后重复索引

时间:2017-03-11 20:10:30

标签: c# arrays loops

你如何在C#中检索数组中元素的最后一次重复索引?

例如,您有:int[] array = { 3, 5, 7, 8, 3, 4, 3 , 9 };

你正在寻找 元件 3最后重复的索引是6。

这是我找到第一次重复的原因:

public static int Search(int[] array, int value)
{
    for (int i = 0; i < array.Length; i++)
    {
        if (value == array[i])
        {
            return i;
        }
    }
    return -1;
}

PS:我不能使用任何功能或方法。我被允许只使用数组。

4 个答案:

答案 0 :(得分:4)

尝试从后面搜索。如果从数组的第一个元素进行搜索,则肯定需要搜索直到数组的末尾。如果从后面搜索,则可以在找到后立即返回该值。

public static int search(int lem, int[] a)
{
    for (int i = a.Length - 1; i >= 0; i--) 
    {
        if (lem == a[i])
        {
            return i;
        }
    }
     return -1; 
}

答案 1 :(得分:1)

你的问题很模糊。如果您正在寻找任何重复的(不是必需的3),我建议您使用HashSet<int>(C#实施):

int[] array = { 3, 5, 7, 8, 3, 4, 3, 9 };

HashSet<int> used = new HashSet<int>();

int last = -1;

for (int i = 0; i < array.Length; ++i)
  if (!used.Add(array[i])) // failed to add to the set, array[i] is a duplicate
    last = i;

Console.Write(last); 

如果您仅查找3最后次,请尝试向后循环

   int last = -1;

   for (int i = array.Length - 1; i >= 0; --i)
     if (array[i] == 3) {
       last = i;

       break;
     } 

答案 2 :(得分:0)

如果你知道如何找到第一次重复,为什么不使用array.Reverse(),使用已知的algorythm,然后减去找到的值array.Length

但是如果你只想要一个方法调用,你可以修改你的解决方案,在它完成循环数组之前不返回值:

public static int search(int lem, int[] a)
{
    int j = -1;
    for (int i = 0; i < a.Length; i++) 
    {
        if (lem == a[i])
        {
            j = i;
        }
    }
    return j; 
}

答案 3 :(得分:0)

尝试这种通用方法:

public static int FindLast<T>(T[] array, T value)
    where T : IEquatable<T>
{
    for (int i = array.Length - 1; i >= 0; i--)
    {
        if (array[i].Equals(value))
        {
            return i;
        }
    }

    return -1;
}