Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 分类集增加了混乱_C#_Icomparer_Sortedset_Generic Collections - Fatal编程技术网

C# 分类集增加了混乱

C# 分类集增加了混乱,c#,icomparer,sortedset,generic-collections,C#,Icomparer,Sortedset,Generic Collections,当我运行下面的代码时,只添加了目录中50个文件中的8个 这些文件的名称类似于0001、0002、0003、0004等 添加的文件的顺序如下:7,0,1,2,3,4,5,6,当不再添加项目时 查看我的SortedSet的最小值和最大值分别为6和7 我想我的问题是,有没有更好的方法来实现这一点,或者有没有一种方法可以让下面的代码实现我想要的功能。更具体地说,我希望根据文件中解析的值在集合中对文件路径字符串进行排序 string[] files = System.IO.Directory.GetFil

当我运行下面的代码时,只添加了目录中50个文件中的8个

这些文件的名称类似于0001、0002、0003、0004等

添加的文件的顺序如下:7,0,1,2,3,4,5,6,当不再添加项目时

查看我的SortedSet的最小值和最大值分别为6和7

我想我的问题是,有没有更好的方法来实现这一点,或者有没有一种方法可以让下面的代码实现我想要的功能。更具体地说,我希望根据文件中解析的值在集合中对文件路径字符串进行排序

string[] files = System.IO.Directory.GetFiles(textBox1.Text);

SortedSet<string> ascending = new SortedSet<string>(new MyComparer());

foreach (string f in files)
{
    bool added = ascending.Add(f);
}

//Compares values in file format
//MyComparer.Compare:
using (FileStream fsx = new FileStream(x, FileMode.Open, FileAccess.Read, FileShare.Read))
using (FileStream fsy = new FileStream(y, FileMode.Open, FileAccess.Read, FileShare.Read))
using (StreamReader rx = new StreamReader(fsx))
using (StreamReader ry = new StreamReader(fsy))
{
    //the first 6 bytes represent a number
    char[] buffx = new char[6], buffy = new char[6];
    rx.Read(buffx, 0, 6);
    ry.Read(buffy, 0, 6);

    int nx, ny;
    if (!int.TryParse(new String(buffx), out nx))
        throw new Exception("Wtf?");
    if (!int.TryParse(new String(buffy), out ny))
        throw new Exception("Wtf?");

    return Comparer<int>.Default.Compare(nx, ny);
}
string[]files=System.IO.Directory.GetFiles(textBox1.Text);
SortedSet升序=新的SortedSet(新的MyComparer());
foreach(文件中的字符串f)
{
bool added=升序。Add(f);
}
//比较文件格式中的值
//MyComparer.比较:
使用(FileStream fsx=newfilestream(x,FileMode.Open,FileAccess.Read,FileShare.Read))
使用(FileStream fsy=newfilestream(y,FileMode.Open,FileAccess.Read,FileShare.Read))
使用(StreamReader rx=新StreamReader(fsx))
使用(StreamReader ry=新StreamReader(fsy))
{
//前6个字节表示一个数字
char[]buffx=新字符[6],buffy=新字符[6];
读取(buffx,0,6);
ry.Read(巴菲,0,6);
纽约州奈斯;
if(!int.TryParse(新字符串(buffx),out nx))
抛出新异常(“Wtf?”);
if(!int.TryParse(新字符串(buffy),out-ny))
抛出新异常(“Wtf?”);
返回Comparer.Default.Compare(nx,ny);
}

我会编写与此类似的代码:

int GetFileContentNumber(string filename)
{
  using(var reader=new StreamReader(filename)
  {
    char[] chars=new char[6];
    reader.Read(buf, 0, 6);
    return int.Parse(new String(chars));

  }
}

IEnumerable<string> files = System.IO.Directory.GetFiles(textBox1.Text)
    .Select(filename=>new KeyValuePair<string,int>(filename, GetFileContentNumber(filename)))
    .OrderBy(pair=>pair.Value)
    .Select(pair=>pair.Key);
int GetFileContentNumber(字符串文件名)
{
使用(var reader=newstreamreader(文件名)
{
char[]chars=新字符[6];
reader.Read(buf,0,6);
返回int.Parse(新字符串(chars));
}
}
IEnumerable files=System.IO.Directory.GetFiles(textBox1.Text)
.Select(filename=>newkeyvaluepair(filename,GetFileContentNumber(filename)))
.OrderBy(pair=>pair.Value)
.Select(pair=>pair.Key);

但是我还没有测试它。所以它可能仍然有bug。

那么
AL3SequenceComparer
的代码在哪里?很明显,bug就在那里。