[转载]C#如何清除字符串数组中的重复项

[转载]C#如何清除字符串数组中的重复项,第1张

清除字符数组中的重复项,两种调用方式,第一种为原型,第二种为扩展方法,可以不用限定数组长度

第一种(原型):

///

///

清除字符串数组中的重复项

///

///

字符串数组

///

字符串数组中单个元素的最大长度

///

public

static

string[]

DistinctStringArray(string[]

strArray,

int

maxElementLength)

{

Hashtable

h

=

new

Hashtable()

foreach

(string

s

in

strArray)

{

string

k

=

s

if

(maxElementLength

>

0

&&

k.Length

>

maxElementLength)

{

k

=

k.Substring(0,

maxElementLength)

}

h[k.Trim()]

=

s

}

string[]

result

=

new

string[h.Count]

h.Keys.CopyTo(result,

0)

return

result

}

第二种(扩展):

///

///

清除字符串数组中的重复项

///

///

字符串数组

///

public

static

string[]

DistinctStringArray(string[]

strArray)

{

return

DistinctStringArray(strArray,

0)

}

调用方法和测试:

string[]

abc

=

{

"a",

"b",

"c",

"b",

"d"

}

string[]

ccc

=

ExfSoft.Common.Utils.DistinctStringArray(abc)

Response.Write(string.Join(",",

ccc))

//输入结果为:a,b,c,d

这样就过滤掉b重复项

实现原理:1、循环数组里的每项2、判断是否是要限定字符串的长度(0-不限制)3、增加Hashtable项,key和值都是当前循环得到的数组的值,两个相当的。

统计字符串中的重复字符,可以通过简单哈希算法来实现。

有效的字符的ascii值在0-127之间,定义一个128位的数组,初始化为0,用数组下标对应相应的字符,数组元素值表示字符出现的频率,统计相应字符的个数,个数大于1的字符就是重复的。

参考代码如下:

#include

void main()

{

char s[1024]

int carr[128]={0}

int i

printf("input a string: ")

gets(s)

for( i=0s[i]i++ )

{

int index=s[i]

if ( index >=0 &&index <= 127 ) //安全处理,防止输入异常时,程序出错

carr[index]++

}

for( i=0i<128i++ )

if ( carr[i] >1 )

printf("%c:%d\n", i, carr[i] )

}运行结果:

input

a

string:

hello

world

l:3

o:2


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10707988.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存