我已编写此程序用于“反转数组并在反转后不显示重复元素”,但它只打印到最后一个元素:
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++;
}
我做错了什么?
答案 0 :(得分: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.
答案 1 :(得分:6)
试试这个:
var arr = new int[] {1,2,4,5,6,4,5};
var tmp = arr.Reverse().Distinct();
希望这有帮助。
答案 2 :(得分:0)
当i = a.Length-1
j = a.Length
如此j >= a.Length
时,最后一个i
Console.WriteLine(a[i]);
未被调用