簡體   English   中英

我怎樣才能以數字方式和最短的順序對多位數字字符串整數進行排序? C#

[英]how can i order multiple digit string integers numerically and by shortest first? C#

我在數據庫中保存了一個實體,該實體具有 2 個相關屬性,代碼和數字。

數字只是 1 到 99 之間的整數,而代碼是字符串表示形式,如“01”到“99”

問題是一些子實體有像“0103”或“3301”這樣的代碼,這只是父代碼+它自己的代碼。

所有實體都保存在一個表中,有 3 個層次結構,僅由代碼長度表示,“00”是第 1 層,“0000”是第 2 層,“000000”是第 3 層。

我想以這樣的方式訂購它們

  • 姓名 - 01
  • 名稱 - 010201
  • 名稱 - 0103
  • 姓名 - 02
  • 名稱 - 0201
  • 姓名 - 04

等等...

其中以“01”開頭的實體是第一個,然后是以“01”開頭的實體,每個實體下面都是以“01xx”開頭的實體,有點像樹狀層次結構。

請注意,我使用的是 EFcore 5、.NET 5 和 C# 9

我現在所擁有的只是

var SearchQuery = _appDbContext.Regions.AsNoTracking().AsQueryable().OrderBy(r => r.Code);

然后我使用該查詢生成我的 DTO

ResultData = await SearchQuery.Select(r => new DTO
                {
                    Id = r.Id,
                    NameCode = r.Name + " - " + r.Code
                }).ToListAsync();

我應該使用自定義比較器還是其他東西? 或者這種方法是否滿足?

使用 IComparable:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication20
{
    class Program
    {
        static void Main(string[] args)
        {

            string[] array = {"name - 01", "name - 010201", "name - 0103", "name - 02", "name - 0201", "name - 04"};
            string[] sorted = array.Select(x => new Sort(x)).OrderBy(x => x).Select(x => x.numericStr).ToArray();
        }
    }
    public class Sort : IComparable<Sort>
    {
        public string numericStr { get; set; }
        string[] split { get; set; }
        string number { get; set; }
        public Sort(string input)
        {
            numericStr = input;
            split = input.Split(new char[] { ' ' }).ToArray();
        }
        public int CompareTo(Sort other)
        {
            int minSize = Math.Min(split.Length, split.Length);
            for(int i = 0; i < minSize; i++)
            {
                int c = split[i].CompareTo(other.split[i]);
                if (c != 0) return c;
            }
            return split.Length.CompareTo(other.split.Length);

        }
    }
    
}

我設法制作了一個 function,它收集了 3 個不同列表中的 1、2、3 級實體(在應用過濾器之后),然后循環遍歷它不到幾次,並根據正確的順序將它們插入到List<Entity>

但@CharlesMager 已向我澄清,正常的OrderBy(r => r.Code)將具有完全相同的結果,因為 Code 屬性沒有任何空格。

換句話說: OrderBy(r => r.Code)不會像我之前認為的那樣對010201xx中的字符串進行排序; 相反,它會按照正確的順序對它們進行排序,例如0101xx0202xx等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM