【问题标题】:Working with two arrays with same elements but different indexes [duplicate]使用具有相同元素但索引不同的两个数组[重复]
【发布时间】:2018-01-17 10:25:50
【问题描述】:

假设我们有两个包含 1000 个单元的字符串数组(命名为 A 和 B)。 A 包含 1000 个单词,但 B 为空。

现在我想将 A 的每个元素复制到 B,但 A 和 B 中元素的索引之间不应该有任何关系或顺序,至少难以识别。

最后,数组 A 将被清空,所以我必须使用数组 B,但我想获取元素的实际索引(该元素在数组 A 中的索引)。

你能建议任何方法来解决这个问题吗? (使用键或等式生成索引会很好)

【问题讨论】:

  • 那么您想以不同(任意)顺序将元素从一个数组复制到另一个数组中吗?只需混合您的数组并复制到B,您的问题到底出在哪里?关于混合数组?将值复制到新值?您的问题过于宽泛,不包括任何自己的研究经费。
  • 听起来你想要一个可逆的随机播放?您必须能够存储或生成原始索引。
  • 您可能想先解决更简单的问题,即只是随机播放(或至少表明您已经知道如何解决该问题)。因为目前这个问题似乎相当广泛。
  • @LasseV.Karlsen 是的,我需要一个可逆的随机播放。

标签: c# arrays algorithm math


【解决方案1】:

您可以为源数组中的每个元素生成一个随机数并按以下方式排序:

var r = new Random();
var B = A.OrderBy(x => r.Next(0, A.Length + 1)).ToArray();

这可能会产生相同的数字,但从您的问题来看,只要您的输入数组与A 的顺序不同,这并不重要。

如果您还需要A 中元素的原始索引,请使用同样使用当前元素索引的overload for Select

var B = A.Select((x, i) => new { Index = i, Value = x })
    .OrderBy(x => r.Next(0, A.Length + 1)).ToArray();

现在您的 B- 是一个匿名类型的数组,具有 Index- 和 Value- 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2017-11-05
    相关资源
    最近更新 更多