我对C#编程相当陌生,而且我被困在了我的小ASP.NET项目中。计算数组中字符串的出现次数,然后删除重复项
我的网站目前检查针对URL的Twitter状态,然后添加这些网址到阵列,所有这些都通过一个正则表达式模式匹配过程。很明显,不止一个人会使用特定的URL更新a,所以我不想列出重复项,并且我想要统计特定URL在100个推文中被提及的次数。
现在我有一个List<String>
,我可以排序,使所有重复的URL是彼此相邻。我的印象是,我可以将list[i]
与list[i+1]
进行比较,如果它们匹配,则将计数器添加到(count ++)中,如果它们不匹配,则将URL和计数值添加到新的数组,假设这是重复项的结尾。
这将消除重复的,给我的出现对每个URL的数量的计数。目前,我所拥有的并不是工作,我不知道为什么(就像我说的,我对此并不是很有经验)。
用下面的代码,假设JSON馈送已搜索用关键字成srchResponse.results
。其中包含URL的结果将被添加到sList
,这是一个字符串List类型,其中只包含网址,而不包含整个消息。
我想把每个URL(无重复)中的一个,一个URL出现次数的计数整数(以字符串),以及用户名,消息和用户图像URL全部放入我称为'网址[100] []”。我已经制作了100行长的阵列,以确保一切都可以适合,但通常情况下,这太大了。每个'行'将有5个元素。
调试器卡住就行了:if (sList[i] == sList[i + 1])
这是我的想法的关键所在,所以清楚的逻辑是行不通的。任何建议或任何事情都将被认真赞赏!
下面是示例代码:
var sList = new ArrayList();
string[][] urls = new string[100][];
int ctr = 0;
int j = 1;
foreach (Result res in srchResponse.results)
{
string content = res.text;
string pattern = @"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)";
MatchCollection matches = Regex.Matches(content, pattern);
foreach (Match match in matches)
{
GroupCollection groups = match.Groups;
sList.Add(groups[0].Value.ToString());
}
}
sList.Sort();
foreach (Result res in srchResponse.results)
{
for (int i = 0; i < 100; i++)
{
if (sList[i] == sList[i + 1])
{
j++;
}
else
{
urls[ctr][0] = sList[i].ToString();
urls[ctr][1] = j.ToString();
urls[ctr][2] = res.text;
urls[ctr][3] = res.from_user;
urls[ctr][4] = res.profile_image_url;
ctr++;
j = 1;
}
}
}
然后,代码进到每个结果添加到与所述HTML一个StringBuilder方法。
现在是edite
您能够利用LINQ(即可以使用3.0版本的框架)?它可以做你正在问的约1行代码:) – 2010-01-02 18:25:42
我使用3.5框架...你能给我一个实现LINQ或我可以找到更多的例子? – Alex 2010-01-02 18:30:45
不错的例子:http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx - 更具体到这个例子:http://msdn.microsoft.com/en-us/vcsharp/aa336754.aspx# simple1 – 2010-01-02 18:32:26