我是"自学成才;所以我有时很难理解一些概念。
假设在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<>
类将元素存储在内部列表中以允许迭代,这就是为什么字典是相对胖的对象。