C # базовый порядок словаря Просто нужно очистить ошибку - PullRequest
2 голосов
/ 25 февраля 2010

Я настроил это больше и придумал следующий код, и я думаю, что моя единственная проблема в том, как я инструктирую его читать из textbox1 и выводить в textbox2 с инструкциями сортировки. Я боролся с этим в течение выходных и, если кто-нибудь может мне помочь, спасибо!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        System.Collections.Generic.Dictionary<string, int> myDict = new Dictionary<string, int>();
        myDict.Add("one", 1);
        myDict.Add("four", 4);
        myDict.Add("two", 2);
        myDict.Add("three", 3);

        var sortedDict = (from entry in myDict orderby entry.Value ascending select entry);

        string[] items = textBox1.Text.Split(Environment.NewLine.ToCharArray());
        Array.Sort(items, new ??? ());  
        textBox2.Text = String.Join(Environment.NewLine, items);




    }

}
}

Ответы [ 4 ]

2 голосов
/ 25 февраля 2010

Неважно, в каком порядке вы помещаете вещи в свой словарь, так как они будут переупорядочены платформой. Ваш Comparer должен иметь метод Compare, который выглядит примерно так

public int Compare(string x, string y)
{
    return _dict[x].Compare(_dict[y]);
}

[Edit] Только что увидел последний (прокручиваемый) бит вашего кода. Теперь это должно выглядеть как

string[] items = textBox1.Text.Split(Environment.NewLine.ToCharArray());
Array.Sort(items, new Comparer());
textBox2.Text = String.Join(Environment.NewLine, items);
1 голос
/ 25 февраля 2010

Когда вы реализуете интерфейс IComparer, вам нужно добавить определение для метода Compare , и это то, что вы видели в сообщении об ошибке.

См. этот пример в MSDN.

1 голос
/ 25 февраля 2010

попробуйте это ...

    private void button1_Click(object sender, EventArgs e)
    {
        textBox2.Lines = textBox1.Lines.OrderBy(x => x).ToArray();
    }

или с пользовательской сортировкой

    private void button1_Click(object sender, EventArgs e)
    {
        textBox2.Lines = textBox1.Lines.OrderBy(x => x,new Comparer()).ToArray();
    }
    public class Comparer : IComparer<string>
    {
        public int Compare(string x, string y)
        {
            //logic here
            return 0;
        }
    }
0 голосов
/ 25 февраля 2010

Кажется, что всю проблему можно обойти, просто используя класс SortedDictionary вместо обычного словаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...