【问题标题】:Sorting key-value pairs with keys containg different values使用包含不同值的键对键值对进行排序
【发布时间】:2013-02-17 00:45:12
【问题描述】:

我正在使用 .net 2.0 c#

我有一组从文件中读取的键/值。因此,键可能相同,但与每个键关联的值不同。

我想按排序顺序列出键并在网格中显示它,列中的关联值与不同的值一样多。我能做些什么 ?我尝试使用 SortedList 类,但它不允许重复键。

在 .net 3.0 linq 中有效,但我需要在 .net 2.0 中进行。

我该怎么做?

【问题讨论】:

  • 实现IComparerSee here for a tutorial.
  • 附带说明:您可以在面向 .net 2.0 时使用大多数 C# 3.0 功能

标签: c# .net list key-value


【解决方案1】:

让我们分两部分解决您指出的问题:
[a] 具有相同键但具有不同值的问题 [Soln] 在下面的代码 sn-p 中设计一个用户定义的类,即 DataKeys。
[b] 对列表中的键进行排序 [Soln] 为用户定义的类实现 IComperable。

以下是您可以实现的示例类:

    internal class DataKeys : IComparable<DataKeys>
    {
        private int key;

        private string values;

        public DataKeys(int key, string values)
        {
            this.key = key;
            this.values = values;
        }

        internal int Key
        {
            get { return key; }
        }

        internal string Values
        {
            get { return Values; }
        }

        public int CompareTo(DataKeys other)
        {
            if (this.key > other.key) return 1;
            else if (this.key < other.key) return -1;
            else return 0;
        }

    }

只是根据示例客户端代码检查此代码将如何执行:

    private static void Main(string[] args)
    {
        List<DataKeys> dataRepository = new List<DataKeys>()
                                            {
                                                new DataKeys(10, "Key-10"),
                                                new DataKeys(11, "Key-11"),
                                                new DataKeys(9, "Key-9"),
                                                new DataKeys(8, "Key-8"),
                                                new DataKeys(100, "Key-100")
                                            };
        dataRepository.Sort();

        foreach (var dataKeyse in dataRepository)
        {
            Console.WriteLine(dataKeyse.Key);
        }
    }

输出:

【讨论】:

    【解决方案2】:

    您可以在您的场景中使用DataTable

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            string[] lines = System.IO.File.ReadAllLines("TextFile.txt");
            DataTable dt = new DataTable();
            dt.Columns.Add("key");
            dt.Columns.Add("value");
            foreach (string line in lines)
            {
                string key = line.Split(',')[0];
                string value = line.Split(',')[1];
                dt.Rows.Add(key, value);
            }
            dt.DefaultView.Sort="key";
            dataGridView1.DataSource = dt;
        }
    }
    

    TextFile.txt 文本文件:

    1,test1
    2,test2
    3,test3
    2,test4
    1,test5
    1,test6
    

    【讨论】:

    • 我在 .net 2.0 中做,是否有可用的 var
    • 您的 Visual Studio 版本是多少?
    • 我已经更新了答案,将 var 的用法替换为显式类型。
    • 嗨,我做了一个列表 并用值填充它,现在我想用我的第一个字符串比较它并排序。我使用了 sort(),但它给出了异常“无效操作异常”。我该怎么做
    • 你用过我的例子吗?它对你有用吗?什么是list&lt;string,string&gt;
    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 2018-01-08
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    相关资源
    最近更新 更多