Сортировать строки DataTable по длине в c # - PullRequest
4 голосов
/ 26 июня 2009

Как сделать следующий сценарий: У меня есть некоторые DataTable, который содержит, например, несколько строк:

1.rowa
2.rowab
3.row
4.rowaba
...
п. rowabba

Как сортировать строки по длине, а не по имени. Я хочу отсортировать таблицу по длине полей.

Ответы [ 2 ]

11 голосов
/ 26 июня 2009

Вы можете добавить дополнительный столбец к вашему DataTable, предоставив выражение, содержащее вызов функции len(), в результате чего значения столбца будут автоматически вычислены:

table.Columns.Add("LengthOfName", typeof(int), "len(Name)");

Затем вы можете просто отсортировать новый столбец перед привязкой DataTable к сетке с любым типом элемента управления пользовательского интерфейса, который вы планируете использовать:

table.DefaultView.Sort = "LengthOfName";
1 голос
/ 26 июня 2009

Если вы должны использовать DataTable, вы можете ввести дополнительный столбец для сортировки. В этом случае вы можете установить значение в столбце просто равным длине каждой желаемой ячейки, а затем отсортировать по новому столбцу:

        DataTable table = new DataTable();
        DataColumn val = table.Columns.Add("Value", typeof(string));
        table.Rows.Add("abc");
        table.Rows.Add("defgh");
        table.Rows.Add("i");
        table.Rows.Add("jklm");
        // sort logic: ***** schou-rode's "len(...)" approach is better *****
        DataColumn sort = table.Columns.Add("Sort", typeof(int));
        foreach (DataRow row in table.Rows) {
            row[sort] = ((string)row[val]).Length;
        }
        DataView view = new DataView(table);
        view.Sort = "Sort";
        foreach (DataRowView row in view) {
            Console.WriteLine(row.Row[val]);
        }

Лично я бы использовал типизированный список - либо класса, либо строки в этом случае (поскольку вы указываете только одно значение):

        List<string> list = new List<string> {
            "abc", "defgh", "i", "jklm"};
        list.Sort((x, y) => x.Length.CompareTo(y.Length));
        foreach (string s in list) {
            Console.WriteLine(s);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...