如何返回数组中最小整数的索引?
Posted
技术标签:
【中文标题】如何返回数组中最小整数的索引?【英文标题】:How can I return the index of the minimum integer in an array? 【发布时间】:2016-03-06 04:06:21 【问题描述】:我正在返回数组中最小整数的索引。我从这个论坛找到了解决方案。这是我所做的:
require 'amatch'
include Amatch
ingredients_arr = [
"All purpose", "Ammoniaco", "Assorted sprinkles", "Baking Powder",
"Baking soda", "Banana", "Banana flavor", "Bread improver", "Brown Sugar",
"Buko pandan flavor", "Butter", "Butter flavor", "Butter oil subs",
"Cake Flour", "Cake emulsi\nfier", "Canyon baking powder", "Cheese",
"Chiffon oil", "Choco flavor", "Choco spri\nnkles", "Cocoa (imp)",
"Cocoa (loc)", "Coconut", "Condensada", "Cooking\nOil", "\n Corn Starch",
"Dessicated", "Dutch choco fudge premium", "Dutch cocoa premium", "Egg",
"Evaporad\n a (B)", "Evaporada (S)", "Evaporadaorated\n(B)", "First Class",
"Food color", "Glucose", "Go\n ld coin", "Heart sprinkles", "LPG", "Lard",
"Linga", "Margarine", "Mocha flavor", "Mongo paste red", "Onion", "Ovalet",
"Powdered sugar", "Rhum", "Royal", "Salt", "Sibuyas", "Skim milk (h-end)",
"Skim milk (l-end)", "\n Star sprinkles", "Strawberry flavor",
"Styro (l. plan)", "Super syrup", "Taba", "Tartar", "\n Third Class",
"Ube Paste", "Ube flavor", "Vanilla", "Vanilla 1G", "Vivid icing",
"Wash Sugar", "Water", "White Sugar"
]
i, ingredient = 1, "Flour"
ing_array = Array.new
until ingredient == ""
puts "Enter ingredient #i: "
ingredient = gets.chomp
ing_array << ingredient
i += 1
end
ing_array.pop
m = Sellers.new("margarine")
no_words = ing_array.length
ing_index_arr = Array.new
i = 0
while i < no_words
rating_arr = Array.new
m = Sellers.new(ing_array[i])
j = 0
while j < ingredients_arr.length
x = m.match(ingredients_arr[j])
rating_arr << x
j += 1
end
y = rating_arr.each.with_index.find_all|a, i| a == rating_arr.min .map|a, b| b
ing_index_arr << y
i += 1
end
ing_index_arr # => [[0], [67], [4]]
但我需要这样的东西:
[0, 67, 4]
希望有人可以帮助我。
【问题讨论】:
以后,请将您的问题归结为基本问题。您提供的所有代码和您的示例输入都是无关紧要的。您获得了一个数组arr
的数组(例如,[[0],[67],[4]]
),后者中的每一个都包含一个整数。据我了解,您的问题是如何将arr
转换为包含内部数组中的整数的数组(即[0,67,4]
)。您如何获得arr
无关紧要。
对不起,卡里,如果我写的大部分内容都无关紧要。我只是在想有人可能只是看一下代码并指出我如何获得一个数组形式的整数数组。下次我会问清楚的。谢谢指点。
我明白了。如果您想要关于如何重组代码的建议——既能产生所需的结果,又能使其更“像 Ruby”(对不起),您可以编辑您的问题以提出要求,并提供额外的代码需要(在Amatch
中,至少是Sellers
的类定义)。此外,最好将根据用户输入构造 ing_array
的代码替换为该数组可能看起来像的示例(例如,ing_array = ["Onion", "Salt",..]
),然后将所需的数组显示为对应于的所需结果ing_array
的值。
另外,不要急于选择答案。如果答案不能解决您的实际问题,请通过编辑澄清您的问题,并可能对答案发表评论。一旦你选择了一个答案,读者自然会得出结论,你的问题就是已经回答的问题。即使回答者正确解释了您的问题,选择一个答案也可能会阻止其他可能更好的答案。不用着急。许多 SO 成员至少要等待几个小时(有时甚至更长)才能应用绿色复选标记。
谢谢卡里。其实这是我第一次参加这种论坛。我什至花了半个小时才发布和撰写该查询,因为我不知道一切是如何运作的。所以再次感谢您接受我的问题。当然还有提示。
【参考方案1】:
如果要折叠子数组,请使用flatten
方法。 http://ruby-doc.org/core-2.2.0/Array.html#method-i-flatten
[[0],[67],[4]].flatten == [0,67,4]
【讨论】:
【参考方案2】:我不确定我是否正确理解了你。 如果要获取数组中最小整数的索引,您可以简单地对其进行排序。
数组=[2,9,90,345] 数组.sort => [2, 9, 90, 345]
在这种情况下,最小的整数总是索引=0
当您有 array=[2,3,4] 时,它已经是数字:
数组[0].class => 固定编号
【讨论】:
我无法对其进行排序,因为我需要的是最小值的给定位置,因为它将用于提取另一个数组中的相应元素。无论如何,我发现来自 'y = rating_arr.each.with_index.find_all|a, i| 的值a == rating_arr.min .map|a, b| b' 是一个数组。所以我一直在做的是错误的,将数组插入数组中。感谢您的宝贵时间! 乔,这样就可以了。你也可以写,min_rating = rating_arr.min; rating_arr.each_index.select |i| rating_arr[I] = min_rating
。 Array#select
。与Enumerable#find_all
(又名Enumerable#select
)具有相同的效果。以上是关于如何返回数组中最小整数的索引?的主要内容,如果未能解决你的问题,请参考以下文章
如何找到int数组Python的最小值和最大值的索引[重复]