如何用同一个索引对两个数组进行排序?

1te*_*sah 8 c# arrays sorting

我有2个阵列.我想用相同的索引号对它们进行排序.例如我有这些:

int[] a = {120, 60, 50, 40, 30, 20};
int[] b = {12, 29, 37, 85, 63, 11};

Array.Sort(b); // Now, b is -> b = {11, 12, 29, 37, 63, 85}
Run Code Online (Sandbox Code Playgroud)

我想按b的索引排序 - > a = {20, 120, 60, 50, 30, 40}

如果我也有字符串数组 c -> c = {"b", "u", "r", "s", "a", "1"}

我想用b的索引 - >排序c c = {"1", "b", "u", "r", "a", "s"}

我怎样才能做到这一点?在此先感谢,问候.

jas*_*son 21

使用Array.Sort<TKey, TValue>(TKey[] keys, TValue[] items)接受两个输入数组,一个是键数组,另一个是使用这些键排序的项数组.在这里,对你来说,b是你的钥匙,a是你的物品.

从而:

Array.Sort(b, a);
Run Code Online (Sandbox Code Playgroud)

将使用键对b项目进行排序a.

我想cb索引排序- >c = {"1", "b", "u", "r", "a", "s"}

不清楚你的意思.在你a使用排序的同时b?如果是这样,我们仍然可以使用上述内容.Zip ac成单个数组Tuple<int, string>.

var d = a.Zip(c, (x, y) => Tuple.Create(x, y)).ToArray();
Run Code Online (Sandbox Code Playgroud)

然后:

Array.Sort(b, d);
Run Code Online (Sandbox Code Playgroud)

如上.然后提取件:

a = d.Select(z => z.Item1).ToArray();
c = d.Select(z => z.Item2).ToArray();
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要使用同一组键对许多数组进行排序:

int[] indexes = Enumerable.Range(0, b.Length).ToArray();
Array.Sort(b, indexes);
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用indexes对所需的所有阵列进行排序.例如:

a = indexes.Select(index => a[index]).ToArray();
c = indexes.Select(index => c[index]).ToArray();
Run Code Online (Sandbox Code Playgroud)

等等.

这里可能有一些小的编码错误.没有编译器方便.