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用过一次,如果记忆有用并且试图记住的话。。。是的,走的路。