字符串数组比较和排序

3
首先,我想说我的编程知识非常基础,并且是边学边做的方式。所以如果我听起来很傻,请您见谅。
我有一个多维字符串数组,其中一部分如下:
X       Y

4,1 Adelaide
4,2 Interlagos
4,3 Sakhir
4,4 Hungaroring
4,5 Estoril
4,6 Barcelona
4,7 Silverstone
4,8 Mugello
4,9 Hockenheim
4,10 Monte Carlo

在上表中,X和Y是数组的2个维度。
现在我有另一个字符串数组,其中元素来自上述数组的X维,但未经排序。例如,
4,6
5,15
3,7
10,12

现在我想写一个代码,它会查找数组#2并将数组#1的Y维度中的相应元素分配给它。
例如,当代码遇到数组#2中的4,6时,我希望代码分配对应的值,即巴塞罗那。
我只需要基本的代码片段或算法。其余部分我自己来做。
提前感谢!

3
这似乎是一个字典的工作,而不是一个二维字符串数组。 - Alexander Corwin
1
+1 对于“我只需要基本的代码段或算法,剩下的我自己来完成”的观点。 - Felix K.
4个回答

6
听起来表格1应该是一个Dictionary<string, string>,将"4,6"映射到"Barcelona"。然后你只需要这样做:
// However you want to populate your data
Dictionary<string, string> mapping = ...;

List<string> values = keys.Select(key => mapping[key]).ToList();

请注意,如果任何键没有映射,这将抛出异常 - 如果这不是您想要的,请澄清要求。
目前不清楚您如何获取此数据,或者您的“多维字符串数组”是string[,]还是string[][]。如果您必须将其作为字符串数组接收,请提供更多细节,我们可以解释如何将其转换为字典。

嗨,Jon。第一个数组是“设置”的内容。一旦我把它放上去,它就不会改变。多维数组将是一个string[,]类型,但我对将其作为其他类型没有问题。换句话说,第一个表是一组原始且不可更改的数据。 - Shoaib Mohamed
@ShoaibMohamed:如果你可以将代码更改为仅填充Dictionary<string, string>而不是string[,],那应该没问题。 - Jon Skeet
Jon,我会尝试使用字典填充方法。所有的键都一定会被映射,所以这听起来是一个理想的解决方案。谢谢! - Shoaib Mohamed
Jon,我在成功填充字典后尝试了你的解决方案,但我无法运行你给出的第二行代码。 - Shoaib Mohamed
没关系,我记得那是一个语法错误。在对字典解决方案进行了一些修改以适应我的需求后,它非常好用。 - Shoaib Mohamed

1
如果你必须将第一组数据作为2D数组接收,以下是如何将其转换为字典的方法:
Dictionary<string, string> dic = new Dictionary<string,string>();

for (int i = 0; i < firstArray.GetLength(0); i++)
{
    dic.Add(firstArray[i, 0], firstArray[i, 1]);
}

在寻找填充字典的方法,这个对我很有帮助。谢谢! - Shoaib Mohamed

1
你应该使用字典来实现。字典内部是一个数组。如果你传递一个键值对(用于插入),那么所谓的哈希函数将被应用于键。这个函数返回一个整数i。然后在数组[i]处存储该值。如果你想从字典中获取一个值,只需传递键。内部会应用哈希函数,计算出i并返回数组[i]。这听起来很繁琐,但是对于大型数组查找键的速度很慢(如果按键排序,则为O(log n),如果根本没有排序,则为O(n) - 如果你知道O符号),而哈希函数在大多数应用程序中非常快速。因此,即使是大型字典,访问值也很快。(字典内部还有一些技巧,处理两个键产生相同的整数i的情况,但如果你不想自己实现字典,就不必过多关注这些细节)。
在其他语言中,字典也被称为映射或哈希映射。

嗨,hildensia,感谢您详细的回复!我现在明白了字典是完成这个任务的理想方式,我会尝试一下。 - Shoaib Mohamed

1

我不确定我是否正确理解了你的问题...

你的数组#2,你是想用"巴塞罗那"替换它的元素(比如说"4,6")吗?
如果是这种情况,那么:
循环遍历数组#2,对于每个元素使用String.split()方法获取其中的两个数字部分(例如"4"和"6")。然后使用Integer.parseInt()方法将它们从字符串转换为整数(称之为a和b),并将这些整数作为索引用于数组#1,例如array1[a][b]以获取Y值。

我假设你真的想使用一个数组,因为这些数字很小且有界,否则可以像其他答案建议的那样使用字典...


我不一定想要取代这些内容,可能是将相应的元素添加到另一个维度中。如果X维度遇到“4,6”,则需要将空的Y维度赋值为“巴塞罗那”。 - Shoaib Mohamed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接