字符数组是穷人的字典吗?



我是"自学成才;所以我有时很难理解一些概念。

假设在C#/Java中,我有一个char数组。我还有一个单独的int数组。

我不知道我的char和int数组是如何和为什么的;"聪明";足够了,这样当我迭代字符时,我可以通过递增来更新观察到的字符数,就像它是某种字典一样?

为什么这样有效?

我对我的措辞感到抱歉,我不知道如何确切地解释这对我来说有多困惑

除了比较字符串进行排列之外,我还有什么其他好的用途?

public static bool isPermutation(string s1, string s2)
    {
        if (s1.Length != s2.Length)
        {
            return false;
        }
        int[] letters = new int[128];
        var first = s1.ToCharArray();
        var second = s2.ToCharArray();

        foreach (int c in first)
        {
            Console.WriteLine(c);
            Console.WriteLine(letters[c]);
            letters[c]++;
        }
//etc...

字典是一组"键";以及";值";(您想要的任何类型(。您可以使用键查找相应的值。

数组有一个"索引"和一个";值";。它们并不相同,但它们都以非常不同的方式存储值的集合。

在您的代码中,您将为128个基本ascii字符中的每一个创建一个数组。如果你不知道,你电脑上的所有数据都是以位(1和0(存储的,这些数字也用来表示字母/字符

('#'=35;..'3'=51;…'A'=65;'B'=66;…'A'=97;'B'=98,…'~'=126(

当你说:

foreach (int c in first)

您正在将char强制转换为整数值。因此,当您在第一个字符串中找到一个"A"时,您将在索引65处递增数组中的值。通过这种方式,您可以使用字符的值来查找数组中的索引以进行增量。

因此,你有一种有效的方法来跟踪你看到的每个字符的数量,但它不是字典。您可以从每个可能的字符的占位符开始,而不是在第一次遇到它们时向字典中添加元素。

我不知道我的char和int数组是如何以及为什么的"聪明";足够了,这样当我迭代字符时,我可以通过递增来更新观察到的字符数,就像它是某种字典一样?

您是否在问为什么迭代对数组有效?这是一个非常基本的概念,你有一个数组,你可以对它进行迭代

那与字典无关。事实上,字典根本不可迭代(以稳定的方式(,Dictionary<>类将元素存储在内部列表中以允许迭代,这就是为什么字典是相对胖的对象。

相关内容

  • 没有找到相关文章

最新更新