You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将按字母排序后的C#字符数组还原为原始字符串?

如何将排序后的字符数组还原为原始字符串?

首先得明确一点:直接从排序后的字符数组是没法还原出原始字符串的——因为排序操作已经彻底打乱了字符的原始顺序,除非你在排序前就保存好每个字符的原始位置信息。

看你的代码,目前是直接把字符串转成字符数组后排序,没有保留任何原始位置的记录,所以要实现还原,得修改你的流程,在排序前先把字符和它的原始索引绑定在一起。

下面是具体的实现方案,用C#的元组来存储字符和索引,既简单又直观:

using System;
using System.Globalization;
using System.Linq;

class Program
{
    static void Main()
    {
        Console.WriteLine("TextEingabe!"); 
        string eingabe = "Hallo, das ist mein Text";/* Console.ReadLine(); */ 
        
        // 第一步:保存字符和它的原始索引
        var charWithIndex = eingabe.Select((c, index) => (Char: c, Index: index)).ToList();
        
        // 第二步:按照字符排序(沿用你原来的比较器逻辑)
        charWithIndex.Sort((a, b) => new CharComparer(CultureInfo.GetCultureInfo("lt")).Compare(a.Char, b.Char));
        
        // 排序后的输出(和你原来的代码逻辑一致)
        char[] ausgabe = charWithIndex.Select(item => item.Char).ToArray();
        Console.WriteLine(new string(ausgabe));
        
        // 第三步:还原为原始字符串
        char[] originalChars = new char[eingabe.Length];
        foreach (var item in charWithIndex)
        {
            originalChars[item.Index] = item.Char;
        }
        string originalString = new string(originalChars);
        Console.WriteLine("还原后的原始字符串:");
        Console.WriteLine(originalString);
    }
}

// 补充你用到的CharComparer类(如果还没定义的话)
public class CharComparer : System.Collections.IComparer
{
    private readonly CultureInfo _culture;
    
    public CharComparer(CultureInfo culture)
    {
        _culture = culture;
    }
    
    public int Compare(object x, object y)
    {
        char c1 = (char)x;
        char c2 = (char)y;
        return string.Compare(c1.ToString(), c2.ToString(), _culture, CompareOptions.None);
    }
}

逻辑说明:

  • 用Select((c, index) => (Char: c, Index: index))把每个字符和它在原始字符串中的索引配对,这样即使排序后,我们也能知道每个字符原本的位置。
  • 排序时只针对字符做比较,索引会跟着对应字符一起被排序,不会丢失位置信息。
  • 还原时,创建一个和原始字符串长度一致的字符数组,遍历排序后的集合,把每个字符放回它原来的索引位置,最后转成字符串就是原始内容了。

哪怕你的字符串里有重复字符,这个方法也能正常工作——因为每个重复字符的原始索引是唯一的,还原时会准确放回各自的位置。

内容的提问来源于stack exchange,提问作者kYA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:24:02