String Array比较和排序

时间:2012-03-16 16:40:20

标签: c#

首先,我想说我的编程知识非常基础,并且随着你的风格学习。如果我听起来很愚蠢,请耐心等待。

所以我有一个多维字符串数组,其中一部分是:

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时,我希望代码分配相应的值,即巴塞罗那。

我正在寻找基本的片段或算法。我自己会做其余的事。

提前致谢!

4 个答案:

答案 0 :(得分:6)

听起来像表1应该是Dictionary<string, string>,将“4,6”映射到“巴塞罗那”。然后你可以这样做:

// However you want to populate your data
Dictionary<string, string> mapping = ...;

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

请注意,如果未映射任何键,这将引发异常 - 如果这不是您想要的,请澄清要求。

目前尚不清楚如何获取此数据,或者您的“多维字符串数组”是string[,]还是string[][]。如果 以字符串数组的形式接收它,请提供更多详细信息,我们可以解释如何将其转换为字典。

答案 1 :(得分:1)

你应该使用字典。字典在内部是一个数组。如果您移交一个键值对(插入它),则会将一个所谓的哈希函数应用于该键。该函数返回一个整数i。该值存储在array [i]中。如果你想从字典中获取一个值,你只需要移交密钥。在内部应用散列函数,计算i并返回array [i]。这听起来非常开销,但是对于大型数组来说,搜索密钥的速度很慢(如果按键排序则为O(log n),如果根本没有排序则为O(n) - 如果你知道O符号),其中在大多数应用程序中,哈希函数可以非常快。因此即使使用大型字典访问值也很快。 (在字典中有一些技巧,处理两个键导致相同整数i的情况,但如果您不想自己实现字典,则不必太在意它)

Dictionarys也被称为其他语言的地图或哈希图。

答案 2 :(得分:1)

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

你的阵列#2,你是说你要用“巴塞罗那”替换它的元素(比如说“4,6”)?
如果是这样的话那么:
循环遍历数组#2,对于每个元素使用String.split()从中获取两个数字部分(例如“4”和“6”)。然后使用Integer.parseInt()将它们从String转换为int(称为a,b)并将这些int用作数组#1的索引,如array1 [a] [b]以获取Y值。

我假设你真的想要使用数组,因为这些数字很小且有界限,否则使用字典作为其他答案的建议......

答案 3 :(得分: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]);
}