数组中重复的项去除怎么做?

???2008 2003-08-25 08:49:13
一个数组:
{1,1,1,2,2,2,3,3,3}
我要去除重复的项怎么去掉?
因为重复的次数不定,有可能是三个,有可能是四个。而且维数也不定。
怎么办?
...全文
595 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
batisituta 2003-08-25
  • 打赏
  • 举报
回复
也可以建一个临时表,先用SQL的distinct功能去掉相同的项目,返回的记录集放入数组内。
foxxiap 2003-08-25
  • 打赏
  • 举报
回复
ÔÙ±éÀúht¾Í³ÉÁË
是这个玩意:
再遍历ht就成了
foxxiap 2003-08-25
  • 打赏
  • 举报
回复
int[] original=new int[]{1,1,1,2,2,2,3,3,3};
Hashtable ht=new Hashtable();
for (int i=0;i<original.Length;i++)
{
if (ht[original[i].ToString()]==null)
ht[original[i].ToString()]=original[i];
}

ÔÙ±éÀúht¾Í³ÉÁË
bpy 2003-08-25
  • 打赏
  • 举报
回复
向高手学习
dub 2003-08-25
  • 打赏
  • 举报
回复
同意wacle([Smile!])的思路。自己设计算法的话,我认为howbigsea(大海)的算法:
定义一个数组:b[a.Length]
遍历数组a,对每一个a[i],判断是否在b中
在判断是否在b中时用二分法的查找应该是比较好的算法
dub 2003-08-25
  • 打赏
  • 举报
回复
saucer(思归, .NET MVP)和howbigsea(大海)的方法都可以。
我的算法中,数组经过排序后,如果第一项与第二项相等,则删除第二项,然后“比较项”还是第一项,即再下一轮比较时,比较第一项和第三项,如果不等,则游标下移,“比较项”为第三项,依次比较
个人认为(n-1)*(n-2)的比较次数还是太多。因为排序的比较次数(依排序方法而定)再加上数组一趟比较的次数(n-1)应该比(n-1)*(n-2)小(当n大于一定值时)
以上观点是个人感觉,有错则请指正
wacle 2003-08-25
  • 打赏
  • 举报
回复
楼上诸位给的算法都可以.如果你学过数据结构,可以自己设计算法,个人比较喜欢二分查找.
guoadou 2003-08-25
  • 打赏
  • 举报
回复
嗯 同意 howbigsea(大海)
saucer 2003-08-25
  • 打赏
  • 举报
回复
public static int[] RemoveDup(int[] myData)
{
if (myData.Length > 0)
{
Array.Sort(myData);

int size = 1; //at least 1
for (int i=1; i<myData.Length; i++)
if (myData[i] != myData[i-1])
size++;

int[] myTempData = new int[size];

int j=0;

myTempData[j++] = myData[0];

for (int i=1; i<myData.Length; i++)
if (myData[i] != myData[i-1])
myTempData[j++] = myData[i];

return myTempData;
}

return myData;
}


int[] myData = {1,1,1,5,2,2,2,3,3,3,4};
myData = RemoveDup(myData);
foreach (int x in myData)
Console.WriteLine(x);
howbigsea 2003-08-25
  • 打赏
  • 举报
回复
定义一个数组:b[a.Length]
遍历数组a,对每一个a[i],判断是否在b中

if a[i]在b中,继续
else 把a[i]加到b中,
共比较次数:
set n=a.Length
比较次数=0+1+2+……+(n-1)=(n-1)*(n-2)
dub 2003-08-25
  • 打赏
  • 举报
回复
to:lrxz(九月鹰飞),是什么做不到?在排序时你的数组还确定不了?
你先根据你的数据特点,选择一种效率高的排序方法进行排序。然后再依次比较前后项的值,删除重复项。
sgsh51 2003-08-25
  • 打赏
  • 举报
回复
如果重复的项是连续的话:可以按如下方法进行去除:
假设原来数组长度为number;
for(int i=0;i<number;i++)
{
for(int j=0;j<i;j++)
{
if(a[j]==a[i])
{
for(int h=j;h<i;h++)
a[h]=a[h+1];//j以后的项都往前移一格
number--; //原来数组长度减1
}
}
???2008 2003-08-25
  • 打赏
  • 举报
回复
我也是这样想的,但是做起来做不到啊。
dub 2003-08-25
  • 打赏
  • 举报
回复
我的想法是:先把数组的值做一个排序,然后前一项与它的后一项比较,如果相同则删掉一项,然后再比较后一项与它的下一项的值,依次比较到末尾。

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧