首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SortedSet增加混乱

SortedSet增加混乱
EN

Stack Overflow用户
提问于 2011-05-21 06:15:34
回答 1查看 1.1K关注 0票数 0

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

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

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

看看我的SortedSet的最小值和最大值分别是6和7。

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

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-21 06:30:32

我会像这样写你的代码:

代码语言:javascript
复制
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);

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6078101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档