C# 我的哈希表不工作
我使用哈希表从文件中读取数据并生成集群 假设文件中的数据为:C# 我的哈希表不工作,c#,.net,hashtable,C#,.net,Hashtable,我使用哈希表从文件中读取数据并生成集群 假设文件中的数据为: umair,i,umair sajid,mark,i , k , i 输出如下所示: [{umair,umair},i] [sajid,mark,i,i,k] 但是我的代码不起作用。代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Coll
umair,i,umair
sajid,mark,i , k , i
输出如下所示:
[{umair,umair},i]
[sajid,mark,i,i,k]
但是我的代码不起作用。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
namespace readstringfromfile
{
class Program
{
static void Main()
{
/* int i = 0;
foreach (string line in File.ReadAllLines("newfile.txt"))
{
string[] parts = line.Split(',');
foreach (string part in parts)
{
Console.WriteLine("{0}:{1}", i,part);
}
i++; // For demo only
}*/
Hashtable hashtable = new Hashtable();
using (StreamReader r = new StreamReader("newfile.txt"))
{
string line;
while ((line = r.ReadLine()) != null)
{
string[] records = line.Split(',');
foreach (string record in records)
{
if (hashtable[records] == null)
hashtable[records] = (int)0;
hashtable[records] = (int)hashtable[records] + 1;
Console.WriteLine(hashtable.Keys);
}
/////this portion is not working/////////////////////////////////////
foreach (DictionaryEntry entry in hashtable)
{
for (int i = 0; i < (int)hashtable[records]; i++)
{
Console.WriteLine(entry);
}
}
}
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
使用系统集合;
命名空间readstringfromfile
{
班级计划
{
静态void Main()
{
/*int i=0;
foreach(File.ReadAllLines(“newfile.txt”)中的字符串行)
{
string[]parts=line.Split(',');
foreach(部分中的字符串部分)
{
Console.WriteLine(“{0}:{1}”,i,部分);
}
i++;//仅用于演示
}*/
Hashtable Hashtable=新的Hashtable();
使用(StreamReader r=newstreamreader(“newfile.txt”))
{
弦线;
而((line=r.ReadLine())!=null)
{
string[]records=line.Split(',');
foreach(记录中的字符串记录)
{
if(哈希表[记录]==null)
哈希表[记录]=(int)0;
哈希表[记录]=(int)哈希表[记录]+1;
Console.WriteLine(hashtable.Keys);
}
/////这部分不起作用/////////////////////////////////////
foreach(哈希表中的DictionaryEntry条目)
{
对于(int i=0;i<(int)哈希表[记录];i++)
{
控制台写入线(条目);
}
}
}
}
}
}
}
在插入哈希表(以及从哈希表中读取)时,您使用的是记录
数组,而不是使用foreach变量记录
。另外,在最后一次查看中,您将基于记录进行迭代,而不是基于当前的条目.Key
。您还在过宽的范围内声明哈希表,导致所有行都插入到同一个哈希表中,而不是每行插入一行
public static void Main() {
var lines = new[] { "umair,i,umair", "sajid,mark,i,k,i" };
foreach (var line in lines) {
var hashtable = new Hashtable();
var records = line.Split(',');
foreach (var record in records) {
if (hashtable[record] == null)
hashtable[record] = 0;
hashtable[record] = (Int32)hashtable[record] + 1;
}
var str = "";
foreach (DictionaryEntry entry in hashtable) {
var count = (Int32)hashtable[entry.Key];
for (var i = 0; i < count; i++) {
str += entry.Key;
if (i < count - 1)
str += ",";
}
str += ",";
}
// Remove last comma.
str = str.TrimEnd(',');
Console.WriteLine(str);
}
Console.ReadLine();
}
publicstaticvoidmain(){
var lines=new[]{“umair,i,umair”,“sajid,mark,i,k,i”};
foreach(行中的var行){
var hashtable=新的hashtable();
var记录=行分割(',');
foreach(记录中的var记录){
if(哈希表[记录]==null)
哈希表[记录]=0;
哈希表[记录]=(Int32)哈希表[记录]+1;
}
var str=“”;
foreach(哈希表中的DictionaryEntry条目){
var count=(Int32)哈希表[entry.Key];
对于(变量i=0;i
但是,你应该考虑使用泛型类,如果你正在构建很多字符串,使用A。
public static void Main() {
var lines = new[] { "umair,i,umair", "sajid,mark,i,k,i" };
foreach (var line in lines) {
var dictionary = new Dictionary<String, Int32>();
var records = line.Split(',');
foreach (var record in records) {
if (!dictionary.ContainsKey(record))
dictionary.Add(record, 1);
else
dictionary[record]++;
}
var str = "";
foreach (var entry in dictionary) {
for (var i = 0; i < entry.Value; i++) {
str += entry.Key;
if (i < entry.Value - 1)
str += ",";
}
str += ",";
}
// Remove last comma.
str = str.TrimEnd(',');
Console.WriteLine(str);
}
Console.ReadLine();
}
publicstaticvoidmain(){
var lines=new[]{“umair,i,umair”,“sajid,mark,i,k,i”};
foreach(行中的var行){
var dictionary=newdictionary();
var记录=行分割(',');
foreach(记录中的var记录){
如果(!dictionary.ContainsKey(记录))
添加(记录1);
其他的
字典[记录]+;
}
var str=“”;
foreach(字典中的var条目){
对于(变量i=0;i
您正在尝试对序列的元素进行分组。LINQ为此有一个内置的操作符;它被用作组。。。通过进入…
或等效方法。GroupBy(…)
这意味着您可以将代码(不包括文件I/O等)编写为:
如果您喜欢较短的代码,循环可以等效地编写为:
foreach (var line in lines)
Console.WriteLine(string.Join(",",
line.Split(',').GroupBy(rec=>rec).SelectMany(grp=>grp)));
两个版本都将输出
umair,umair,i
sajid,mark,i,i,k
请注意,您真的不应该使用哈希表
——这只是字典
的一个类型不安全的慢版本。另外,您提到的输出示例包括[]
和{}
字符,但是您没有指定如何或是否应该包含这些字符,所以我将它们省略了
LINQ组不过是一系列元素(这里是相同的字符串)和一个键(这里是字符串)。因此,调用GroupBy
将记录序列转换为组序列。但是,您希望简单地连接这些组SelectMany
就是这样一种串联:从一个项目序列中,它将每个项目的“内容”串联成一个大序列。您不需要将文本0转换为整数。将所有其他内容都放在一边,是否有任何原因使您仍在使用非泛型集合?好的,我不会强制转换0,但这一部分如何?foreach(hashtable中的DictionaryEntry条目){for(int i=0;i<(int)hashtable[记录];i++{Console.WriteLine(条目);}}
umair,umair,i
sajid,mark,i,i,k