我可以将给定的单词(String)表示为数字吗?

时间:2018-03-05 16:05:40

标签: c# .net string character-encoding numbers

假设我有一个单词列表,例如

var words = new [] {"bob", "alice", "john"};

有没有办法将每个单词表示为数字,以便可以使用这些数字对单词进行排序。

我认为可以使用的一个用例是使用 Counting Sort 对单词列表进行排序。我再次感兴趣的是,这是否完全不是因为它可能不是排序单词列表的最有效方式。

请注意,这不是关于哈希码或不同的排序算法。我很想知道字符串是否可以表示为数字。

2 个答案:

答案 0 :(得分:0)

您可以使用字典而不是数组。

public class Program
{
    static void Main(string[] args)
    {
        IDictionary<int, string> words = new Dictionary<int, string>();
        words.Add(0, "bob");
        words.Add(1, "alice");
        words.Add(2, "john");

        foreach (KeyValuePair<int, string> word in words.OrderBy(w => w.Key))
        {
            Console.WriteLine(word.Value);
        }

        Console.ReadLine();
    }
}

注意:对于大多数开发人员来说,使用集合代替数组更好一些。

答案 1 :(得分:0)

我不理解下来的选票,但是这是我到目前为止所提出的:

private int _alphabetLength = char.MaxValue - char.MinValue;
private BigInteger Convert(string data)
{
    var value = new BigInteger();
    var startPoint = data.Length - 1;
    for (int i = data.Length - 1; i >= 0; i--)
    {
        var character = data[i];
        var charNumericValue = character;
        var exponentialWeight = startPoint - i;
        var weightedValue = new BigInteger(charNumericValue * Math.Pow(_alphabetLength, exponentialWeight));
        value += weightedValue;
    }
    return value;
}

使用以上内容转换以下内容:

var words = new [] {"bob", "alice", "john" };
  • 420901224533 // bob
  • -9223372036854775808 // alice
  • 29835458486206476 // john

尽管溢出输出看起来像是排序给我,但我需要改进它并正确测试它,但至少它是一个开始。