-4

「配列を反転し、反転後に重複要素を表示しない」ためにこのプログラムを作成しましたが、最後から2番目の要素まで出力されます。

int[] a = new int[] { 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10 };

for (int i = 0; i < a.Length / 2; i++)
{
    int tmp = a[i];//Getting First/current element
    a[i] = a[a.Length - i - 1];//Getting last Element and assigning to first/current                
    a[a.Length - i - 1] = tmp;
}

int j=0;
for(int i=0;i< a.Length;i++)
{
    j=i+1;
    if(j < a.Length)
    {
        if (a[i] != a[j])
            Console.WriteLine(a[i]);
    }
    j++;
}

私は何を間違っていますか?

4

3 に答える 3

11

あなたが間違っているのは、LINQを使用していないことです:

foreach (int i in a.Reverse().Distinct())
{
    Console.WriteLine(i);
}

ただし、手動で行いたいと思われるため、そのための実装を次に示します。

IEnumerable<T> Reverse<T>(this IList<T> arr)
{
    if (arr == null) throw new ArgumentNullException();
    for(int i = arr.Count - 1; i > 0; i--) yield return arr[i];
}
IEnumerable<T> Distinct<T>(this IEnumerable<T> list)
{
    Hashset<T> tmpHash = new Hashset<T>();
    foreach (T item in list) tmpHash.Add(item);
    return tmpHash;
}
//your method is now simple as:
a.Reverse().Distinct(); //hey, looks like LINQ but I've implemented it myself.
于 2013-06-30T19:54:39.613 に答える
6

これを試して :

        var arr = new int[] {1,2,4,5,6,4,5};
        var tmp = arr.Reverse().Distinct();

この助けを願っています。

于 2013-06-30T19:55:52.207 に答える
0

i = a.Length-1 j = a.Lengthそうそうj >= a.Length最後のものi Console.WriteLine(a[i]);が呼び出されない場合

于 2013-06-30T19:59:17.353 に答える