Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 根据相应的整数数组对字符串数组进行排序_Arrays_Ruby_Sorting - Fatal编程技术网

Arrays 根据相应的整数数组对字符串数组进行排序

Arrays 根据相应的整数数组对字符串数组进行排序,arrays,ruby,sorting,Arrays,Ruby,Sorting,假设给我一个字符串数组,每个字符串都有相应的权重。例如: str_arr = ["james", "blake", "rob"] weights = [4, 7, 1] str_arr[i]对应于权重[i] 我如何按照权重的升序对str_arr进行排序?例如: str_arr = ["james", "blake", "rob"] weights = [4, 7, 1] 排序后的权重为[1,4,7],对应于str_arr=[rob,james,blake] 我怎样才能得到[罗布、詹姆斯、布莱

假设给我一个字符串数组,每个字符串都有相应的权重。例如:

str_arr = ["james", "blake", "rob"]
weights = [4, 7, 1]
str_arr[i]对应于权重[i]

我如何按照权重的升序对str_arr进行排序?例如:

str_arr = ["james", "blake", "rob"]
weights = [4, 7, 1]
排序后的权重为[1,4,7],对应于str_arr=[rob,james,blake]

我怎样才能得到[罗布、詹姆斯、布莱克]


大多数排序比较器处理修改当前数组上排序的工作方式,我研究了如何根据不同数组的现有顺序进行排序,但我不确定如何对整数数组进行排序,以及如何根据整数数组的输出同时对str_arr进行排序……有没有Rubyist方法可以做到这一点?

您可以通过并行赋值执行以下操作:

str_arr, weights = str_arr.zip(weights).sort_by(&:last).transpose
#=> [["rob", "james", "blake"], [1, 4, 7]]

str_arr #=> ["rob", "james", "blake"] 
weights #=> [1, 4, 7]

关键方法:,和。

您可以通过并行分配执行以下操作:

str_arr, weights = str_arr.zip(weights).sort_by(&:last).transpose
#=> [["rob", "james", "blake"], [1, 4, 7]]

str_arr #=> ["rob", "james", "blake"] 
weights #=> [1, 4, 7]
主要方法:、和

这两个步骤如下

a = weights.size.times.sort_by { |i| weights[i] }
  #=> [2, 0, 1]
str_arr.values_at(*a)
  #=> ["rob", "james", "blake"]
见和

这两个步骤如下

a = weights.size.times.sort_by { |i| weights[i] }
  #=> [2, 0, 1]
str_arr.values_at(*a)
  #=> ["rob", "james", "blake"]

请参阅和。

如果有两个数组彼此100%链接,则应使用哈希:

str_arr = ["james", "blake", "rob"]
weights = [4, 7, 1]

weights = str_arr.zip(weights).to_h
# {"james"=>4, "blake"=>7, "rob"=>1}
您可以按值对_进行排序,然后:

str_arr = ["james", "blake", "rob"]
weights = [4, 7, 1]

weights = str_arr.zip(weights).to_h

p weights.sort_by{|k, v| v}.map(&:first)
#=> ["rob", "james", "blake"]

如果有两个数组彼此100%链接,则应使用哈希:

str_arr = ["james", "blake", "rob"]
weights = [4, 7, 1]

weights = str_arr.zip(weights).to_h
# {"james"=>4, "blake"=>7, "rob"=>1}
您可以按值对_进行排序,然后:

str_arr = ["james", "blake", "rob"]
weights = [4, 7, 1]

weights = str_arr.zip(weights).to_h

p weights.sort_by{|k, v| v}.map(&:first)
#=> ["rob", "james", "blake"]
您可以使用和:

您可以使用和:


Ruby方法将使用哈希而不是数组{james:4,blake:7,…},根据权重值排序并使用.keys方法生成数组Ruby方法将使用哈希而不是数组{james:4,blake:7,…},对权重值进行排序并使用.keys方法生成数组如果缺少一个权重,则此方法无效,对吗?颠倒顺序,您不需要排序依据:weights.zipstr\u arr.sort。transpose@Sunny不知道你的意思。缺少权重的数组看起来如何?如果缺少一个权重,这将不起作用,对吗?颠倒顺序,您不需要排序依据:weights.zipstr\u arr.sort。transpose@Sunny不知道你的意思。缺少权重的数组看起来如何?On*logn很无聊。这是一个不错的选择!解决方案:str_arr.permutation.to_a[weights.permutation.to_a.indexweights.sort];洛根很无聊。这是一个不错的选择!解决方案:str_arr.permutation.to_a[weights.permutation.to_a.indexweights.sort];我至少见过@ArupRakshit使用过一次,如果记忆有用并且试图记住的话。。。是的,很好。我至少见过@ArupRakshit用过一次,如果记忆有用并且试图记住的话。。。是的,走的路。