从 txt 中读取数字并对其进行排序 - 转换错误

Posted

技术标签:

【中文标题】从 txt 中读取数字并对其进行排序 - 转换错误【英文标题】:Read numbers from txt and sort them - cast error 【发布时间】:2017-11-20 16:16:44 【问题描述】:

我想在数字之间有空格的 txt 文件中获取数字并在排序列表中生成。 但我得到了

无法将“System.String[]”类型的对象转换为“System.IConvertible”类型。错误

using (OpenFileDialog ofd = new OpenFileDialog()  Filter = "Text Dosyası(*.txt)|*.txt", ValidateNames = true, Multiselect = false )

    if (ofd.ShowDialog()==DialogResult.OK)
    
        string[] lines = File.ReadAllLines(ofd.FileName);
        List<Double> list = new List<Double>();

        foreach (string s in lines)
        
            //int nmbr = 0;
            lines = s.Split(new char[]  , StringSplitOptions.RemoveEmptyEntries);
            list.Add(Convert.ToDouble(lines));
            listfile.Items.Add((Convert.ToDouble(lines)));

        

        list.Sort();
        foreach (Double x in list)
        
            listBox1.Items.Add(x);
        

【问题讨论】:

您不能将字符串列表转换为双精度。用 Select() 投影每个元素,然后转换它,用 AddRange() 添加。 你能给我更多的示例或在我的代码中编辑它 @SilasHayri - 您能否在问题中提供您的输入示例? 【参考方案1】:

首先,您在 foreach 语句中重新分配了您的 lines 变量,这是不正确的。

其次,您正在尝试转换一个值数组,而不是转换每个值本身。

foreach (string s in lines)

    //int nmbr = 0;
    var numbers = s.Split(new char[]  , StringSplitOptions.RemoveEmptyEntries);
    foreach(var number in numbers)
    
        var convertedNumber = Convert.ToDouble(number);
        list.Add(convertedNumber);
        listfile.Items.Add(convertedNumber);
    
 

要按降序排列检索到的值,您可以这样做:

list = list.OrderByDescending(x => x).ToList();

一旦你有了一个排序列表,你就可以填充你的列表框

foreach (Double x in list)

    listBox1.Items.Add(x);

【讨论】:

非常感谢 :) 我想按大数先到小数的顺序排列数字 但它没有订购数字:( 这条线怎么样? list = list.OrderByDescending(x =&gt; x).ToList(); 不,仍然只是在两个列表框的 txt 文件中显示数字 无法从 'System.Collections.Generic.List' 转换为 System.Windows.Forms.ListBox.ObjectCollection【参考方案2】:

你可以这样做:

List<double> list =
    File
        .ReadAllLines(ofd.FileName)
        .SelectMany(line => line.Split(' '))
        .Select(double.Parse)
        .OrderBy(x => x)
        .ToList();

foreach (double x in list)

    listBox1.Items.Add(x);

【讨论】:

以上是关于从 txt 中读取数字并对其进行排序 - 转换错误的主要内容,如果未能解决你的问题,请参考以下文章

合并 2 个文件并对其进行排序

使用正则表达式提取不同格式的日期并对其进行排序 - 熊猫

sql 从连接的查询中获取所有列,搜索列名并对其进行排序

如何按列值的计数进行分组并对其进行排序?

Java读取txt文件,并且对其文件内容进行统计排序

面试官:手写一个选择排序并对其改进